function $$CookieReader(e) {
    function t(e) {
        try {
            return decodeURIComponent(e)
        } catch(t) {
            return e
        }
    }
    var n = e[0],
    r = {},
    i = "";
    return function() {
        var e, o, s, a, l;
        if (n.cookie !== i) for (i = n.cookie, e = i.split("; "), r = {},
        s = 0; s < e.length; s++) o = e[s],
        a = o.indexOf("="),
        a > 0 && (l = t(o.substring(0, a)), void 0 === r[l] && (r[l] = t(o.substring(a + 1))));
        return r
    }
}
function $$CookieWriter(e, t, n) {
    function r(e, n, r) {
        var o, s;
        r = r || {},
        s = r.expires,
        o = angular.isDefined(r.path) ? r.path: i,
        void 0 === n && (s = "Thu, 01 Jan 1970 00:00:00 GMT", n = ""),
        angular.isString(s) && (s = new Date(s));
        var a = encodeURIComponent(e) + "=" + encodeURIComponent(n);
        a += o ? ";path=" + o: "",
        a += r.domain ? ";domain=" + r.domain: "",
        a += s ? ";expires=" + s.toUTCString() : "",
        a += r.secure ? ";secure": "";
        var l = a.length + 1;
        return l > 4096 && t.warn("Cookie '" + e + "' possibly not set or overflowed because it was too large (" + l + " > 4096 bytes)!"),
        a
    }
    var i = n.baseHref(),
    o = e[0];
    return function(e, t, n) {
        o.cookie = r(e, t, n)
    }
}
function _logType(e, t) {
    var n = Array.prototype.slice.call(t);
    e ? n.unshift(e.toUpperCase() + ":") : e = "log",
    vjs.log.history.push(n),
    n.unshift("VIDEOJS:"),
    _console[e].apply ? _console[e].apply(_console, n) : _console[e](n.join(" "))
}
function initFirstPlay(e) {
    var t = {
        type: "firstplay",
        target: this.el_
    },
    n = vjs.trigger(this.el_, t);
    n || (e.preventDefault(), e.stopPropagation(), e.stopImmediatePropagation())
}
function createMethod(e) {
    return function() {
        throw new Error('The "' + e + "\" method is not available on the playback technology's API")
    }
}
function QR8bitByte(e) {
    this.mode = QRMode.MODE_8BIT_BYTE,
    this.data = e
}
function QRCode(e, t) {
    this.typeNumber = e,
    this.errorCorrectLevel = t,
    this.modules = null,
    this.moduleCount = 0,
    this.dataCache = null,
    this.dataList = new Array
}
function QRPolynomial(e, t) {
    if (void 0 == e.length) throw new Error(e.length + "/" + t);
    for (var n = 0; n < e.length && 0 == e[n];) n++;
    this.num = new Array(e.length - n + t);
    for (var r = 0; r < e.length - n; r++) this.num[r] = e[r + n]
}
function QRRSBlock(e, t) {
    this.totalCount = e,
    this.dataCount = t
}
function QRBitBuffer() {
    this.buffer = new Array,
    this.length = 0
} !
function(e, t) {
    "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) {
        if (!e.document) throw new Error("jQuery requires a window with a document");
        return t(e)
    }: t(e)
} ("undefined" != typeof window ? window: this,
function(e, t) {
    function n(e) {
        var t = e.length,
        n = ie.type(e);
        return "function" === n || ie.isWindow(e) ? !1 : 1 === e.nodeType && t ? !0 : "array" === n || 0 === t || "number" == typeof t && t > 0 && t - 1 in e
    }
    function r(e, t, n) {
        if (ie.isFunction(t)) return ie.grep(e,
        function(e, r) {
            return !! t.call(e, r, e) !== n
        });
        if (t.nodeType) return ie.grep(e,
        function(e) {
            return e === t !== n
        });
        if ("string" == typeof t) {
            if (pe.test(t)) return ie.filter(t, e, n);
            t = ie.filter(t, e)
        }
        return ie.grep(e,
        function(e) {
            return ie.inArray(e, t) >= 0 !== n
        })
    }
    function i(e, t) {
        do e = e[t];
        while (e && 1 !== e.nodeType);
        return e
    }
    function o(e) {
        var t = be[e] = {};
        return ie.each(e.match(je) || [],
        function(e, n) {
            t[n] = !0
        }),
        t
    }
    function s() {
        fe.addEventListener ? (fe.removeEventListener("DOMContentLoaded", a, !1), e.removeEventListener("load", a, !1)) : (fe.detachEvent("onreadystatechange", a), e.detachEvent("onload", a))
    }
    function a() { (fe.addEventListener || "load" === event.type || "complete" === fe.readyState) && (s(), ie.ready())
    }
    function l(e, t, n) {
        if (void 0 === n && 1 === e.nodeType) {
            var r = "data-" + t.replace(Te, "-$1").toLowerCase();
            if (n = e.getAttribute(r), "string" == typeof n) {
                try {
                    n = "true" === n ? !0 : "false" === n ? !1 : "null" === n ? null: +n + "" === n ? +n: Ce.test(n) ? ie.parseJSON(n) : n
                } catch(i) {}
                ie.data(e, t, n)
            } else n = void 0
        }
        return n
    }
    function u(e) {
        var t;
        for (t in e) if (("data" !== t || !ie.isEmptyObject(e[t])) && "toJSON" !== t) return ! 1;
        return ! 0
    }
    function c(e, t, n, r) {
        if (ie.acceptData(e)) {
            var i, o, s = ie.expando,
            a = e.nodeType,
            l = a ? ie.cache: e,
            u = a ? e[s] : e[s] && s;
            if (u && l[u] && (r || l[u].data) || void 0 !== n || "string" != typeof t) return u || (u = a ? e[s] = X.pop() || ie.guid++:s),
            l[u] || (l[u] = a ? {}: {
                toJSON: ie.noop
            }),
            "object" != typeof t && "function" != typeof t || (r ? l[u] = ie.extend(l[u], t) : l[u].data = ie.extend(l[u].data, t)),
            o = l[u],
            r || (o.data || (o.data = {}), o = o.data),
            void 0 !== n && (o[ie.camelCase(t)] = n),
            "string" == typeof t ? (i = o[t], null == i && (i = o[ie.camelCase(t)])) : i = o,
            i
        }
    }
    function h(e, t, n) {
        if (ie.acceptData(e)) {
            var r, i, o = e.nodeType,
            s = o ? ie.cache: e,
            a = o ? e[ie.expando] : ie.expando;
            if (s[a]) {
                if (t && (r = n ? s[a] : s[a].data)) {
                    ie.isArray(t) ? t = t.concat(ie.map(t, ie.camelCase)) : t in r ? t = [t] : (t = ie.camelCase(t), t = t in r ? [t] : t.split(" ")),
                    i = t.length;
                    for (; i--;) delete r[t[i]];
                    if (n ? !u(r) : !ie.isEmptyObject(r)) return
                } (n || (delete s[a].data, u(s[a]))) && (o ? ie.cleanData([e], !0) : ne.deleteExpando || s != s.window ? delete s[a] : s[a] = null)
            }
        }
    }
    function p() {
        return ! 0
    }
    function d() {
        return ! 1
    }
    function f() {
        try {
            return fe.activeElement
        } catch(e) {}
    }
    function v(e) {
        var t = Oe.split("|"),
        n = e.createDocumentFragment();
        if (n.createElement) for (; t.length;) n.createElement(t.pop());
        return n
    }
    function m(e, t) {
        var n, r, i = 0,
        o = typeof e.getElementsByTagName !== we ? e.getElementsByTagName(t || "*") : typeof e.querySelectorAll !== we ? e.querySelectorAll(t || "*") : void 0;
        if (!o) for (o = [], n = e.childNodes || e; null != (r = n[i]); i++) ! t || ie.nodeName(r, t) ? o.push(r) : ie.merge(o, m(r, t));
        return void 0 === t || t && ie.nodeName(e, t) ? ie.merge([e], o) : o
    }
    function g(e) {
        Me.test(e.type) && (e.defaultChecked = e.checked)
    }
    function y(e, t) {
        return ie.nodeName(e, "table") && ie.nodeName(11 !== t.nodeType ? t: t.firstChild, "tr") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e
    }
    function j(e) {
        return e.type = (null !== ie.find.attr(e, "type")) + "/" + e.type,
        e
    }
    function b(e) {
        var t = ze.exec(e.type);
        return t ? e.type = t[1] : e.removeAttribute("type"),
        e
    }
    function $(e, t) {
        for (var n, r = 0; null != (n = e[r]); r++) ie._data(n, "globalEval", !t || ie._data(t[r], "globalEval"))
    }
    function x(e, t) {
        if (1 === t.nodeType && ie.hasData(e)) {
            var n, r, i, o = ie._data(e),
            s = ie._data(t, o),
            a = o.events;
            if (a) {
                delete s.handle,
                s.events = {};
                for (n in a) for (r = 0, i = a[n].length; i > r; r++) ie.event.add(t, n, a[n][r])
            }
            s.data && (s.data = ie.extend({},
            s.data))
        }
    }
    function w(e, t) {
        var n, r, i;
        if (1 === t.nodeType) {
            if (n = t.nodeName.toLowerCase(), !ne.noCloneEvent && t[ie.expando]) {
                i = ie._data(t);
                for (r in i.events) ie.removeEvent(t, r, i.handle);
                t.removeAttribute(ie.expando)
            }
            "script" === n && t.text !== e.text ? (j(t).text = e.text, b(t)) : "object" === n ? (t.parentNode && (t.outerHTML = e.outerHTML), ne.html5Clone && e.innerHTML && !ie.trim(t.innerHTML) && (t.innerHTML = e.innerHTML)) : "input" === n && Me.test(e.type) ? (t.defaultChecked = t.checked = e.checked, t.value !== e.value && (t.value = e.value)) : "option" === n ? t.defaultSelected = t.selected = e.defaultSelected: "input" !== n && "textarea" !== n || (t.defaultValue = e.defaultValue)
        }
    }
    function C(t, n) {
        var r, i = ie(n.createElement(t)).appendTo(n.body),
        o = e.getDefaultComputedStyle && (r = e.getDefaultComputedStyle(i[0])) ? r.display: ie.css(i[0], "display");
        return i.detach(),
        o
    }
    function T(e) {
        var t = fe,
        n = Ze[e];
        return n || (n = C(e, t), "none" !== n && n || (Ke = (Ke || ie("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement), t = (Ke[0].contentWindow || Ke[0].contentDocument).document, t.write(), t.close(), n = C(e, t), Ke.detach()), Ze[e] = n),
        n
    }
    function k(e, t) {
        return {
            get: function() {
                var n = e();
                if (null != n) return n ? void delete this.get: (this.get = t).apply(this, arguments)
            }
        }
    }
    function E(e, t) {
        if (t in e) return t;
        for (var n = t.charAt(0).toUpperCase() + t.slice(1), r = t, i = pt.length; i--;) if (t = pt[i] + n, t in e) return t;
        return r
    }
    function _(e, t) {
        for (var n, r, i, o = [], s = 0, a = e.length; a > s; s++) r = e[s],
        r.style && (o[s] = ie._data(r, "olddisplay"), n = r.style.display, t ? (o[s] || "none" !== n || (r.style.display = ""), "" === r.style.display && _e(r) && (o[s] = ie._data(r, "olddisplay", T(r.nodeName)))) : (i = _e(r), (n && "none" !== n || !i) && ie._data(r, "olddisplay", i ? n: ie.css(r, "display"))));
        for (s = 0; a > s; s++) r = e[s],
        r.style && (t && "none" !== r.style.display && "" !== r.style.display || (r.style.display = t ? o[s] || "": "none"));
        return e
    }
    function S(e, t, n) {
        var r = lt.exec(t);
        return r ? Math.max(0, r[1] - (n || 0)) + (r[2] || "px") : t
    }
    function M(e, t, n, r, i) {
        for (var o = n === (r ? "border": "content") ? 4 : "width" === t ? 1 : 0, s = 0; 4 > o; o += 2)"margin" === n && (s += ie.css(e, n + Ee[o], !0, i)),
        r ? ("content" === n && (s -= ie.css(e, "padding" + Ee[o], !0, i)), "margin" !== n && (s -= ie.css(e, "border" + Ee[o] + "Width", !0, i))) : (s += ie.css(e, "padding" + Ee[o], !0, i), "padding" !== n && (s += ie.css(e, "border" + Ee[o] + "Width", !0, i)));
        return s
    }
    function P(e, t, n) {
        var r = !0,
        i = "width" === t ? e.offsetWidth: e.offsetHeight,
        o = et(e),
        s = ne.boxSizing && "border-box" === ie.css(e, "boxSizing", !1, o);
        if (0 >= i || null == i) {
            if (i = tt(e, t, o), (0 > i || null == i) && (i = e.style[t]), rt.test(i)) return i;
            r = s && (ne.boxSizingReliable() || i === e.style[t]),
            i = parseFloat(i) || 0
        }
        return i + M(e, t, n || (s ? "border": "content"), r, o) + "px"
    }
    function A(e, t, n, r, i) {
        return new A.prototype.init(e, t, n, r, i)
    }
    function N() {
        return setTimeout(function() {
            dt = void 0
        }),
        dt = ie.now()
    }
    function R(e, t) {
        var n, r = {
            height: e
        },
        i = 0;
        for (t = t ? 1 : 0; 4 > i; i += 2 - t) n = Ee[i],
        r["margin" + n] = r["padding" + n] = e;
        return t && (r.opacity = r.width = e),
        r
    }
    function D(e, t, n) {
        for (var r, i = (jt[t] || []).concat(jt["*"]), o = 0, s = i.length; s > o; o++) if (r = i[o].call(n, t, e)) return r
    }
    function O(e, t, n) {
        var r, i, o, s, a, l, u, c, h = this,
        p = {},
        d = e.style,
        f = e.nodeType && _e(e),
        v = ie._data(e, "fxshow");
        n.queue || (a = ie._queueHooks(e, "fx"), null == a.unqueued && (a.unqueued = 0, l = a.empty.fire, a.empty.fire = function() {
            a.unqueued || l()
        }), a.unqueued++, h.always(function() {
            h.always(function() {
                a.unqueued--,
                ie.queue(e, "fx").length || a.empty.fire()
            })
        })),
        1 === e.nodeType && ("height" in t || "width" in t) && (n.overflow = [d.overflow, d.overflowX, d.overflowY], u = ie.css(e, "display"), c = "none" === u ? ie._data(e, "olddisplay") || T(e.nodeName) : u, "inline" === c && "none" === ie.css(e, "float") && (ne.inlineBlockNeedsLayout && "inline" !== T(e.nodeName) ? d.zoom = 1 : d.display = "inline-block")),
        n.overflow && (d.overflow = "hidden", ne.shrinkWrapBlocks() || h.always(function() {
            d.overflow = n.overflow[0],
            d.overflowX = n.overflow[1],
            d.overflowY = n.overflow[2]
        }));
        for (r in t) if (i = t[r], vt.exec(i)) {
            if (delete t[r], o = o || "toggle" === i, i === (f ? "hide": "show")) {
                if ("show" !== i || !v || void 0 === v[r]) continue;
                f = !0
            }
            p[r] = v && v[r] || ie.style(e, r)
        } else u = void 0;
        if (ie.isEmptyObject(p))"inline" === ("none" === u ? T(e.nodeName) : u) && (d.display = u);
        else {
            v ? "hidden" in v && (f = v.hidden) : v = ie._data(e, "fxshow", {}),
            o && (v.hidden = !f),
            f ? ie(e).show() : h.done(function() {
                ie(e).hide()
            }),
            h.done(function() {
                var t;
                ie._removeData(e, "fxshow");
                for (t in p) ie.style(e, t, p[t])
            });
            for (r in p) s = D(f ? v[r] : 0, r, h),
            r in v || (v[r] = s.start, f && (s.end = s.start, s.start = "width" === r || "height" === r ? 1 : 0))
        }
    }
    function L(e, t) {
        var n, r, i, o, s;
        for (n in e) if (r = ie.camelCase(n), i = t[r], o = e[n], ie.isArray(o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), s = ie.cssHooks[r], s && "expand" in s) {
            o = s.expand(o),
            delete e[r];
            for (n in o) n in e || (e[n] = o[n], t[n] = i)
        } else t[r] = i
    }
    function F(e, t, n) {
        var r, i, o = 0,
        s = yt.length,
        a = ie.Deferred().always(function() {
            delete l.elem
        }),
        l = function() {
            if (i) return ! 1;
            for (var t = dt || N(), n = Math.max(0, u.startTime + u.duration - t), r = n / u.duration || 0, o = 1 - r, s = 0, l = u.tweens.length; l > s; s++) u.tweens[s].run(o);
            return a.notifyWith(e, [u, o, n]),
            1 > o && l ? n: (a.resolveWith(e, [u]), !1)
        },
        u = a.promise({
            elem: e,
            props: ie.extend({},
            t),
            opts: ie.extend(!0, {
                specialEasing: {}
            },
            n),
            originalProperties: t,
            originalOptions: n,
            startTime: dt || N(),
            duration: n.duration,
            tweens: [],
            createTween: function(t, n) {
                var r = ie.Tween(e, u.opts, t, n, u.opts.specialEasing[t] || u.opts.easing);
                return u.tweens.push(r),
                r
            },
            stop: function(t) {
                var n = 0,
                r = t ? u.tweens.length: 0;
                if (i) return this;
                for (i = !0; r > n; n++) u.tweens[n].run(1);
                return t ? a.resolveWith(e, [u, t]) : a.rejectWith(e, [u, t]),
                this
            }
        }),
        c = u.props;
        for (L(c, u.opts.specialEasing); s > o; o++) if (r = yt[o].call(u, e, c, u.opts)) return r;
        return ie.map(c, D, u),
        ie.isFunction(u.opts.start) && u.opts.start.call(e, u),
        ie.fx.timer(ie.extend(l, {
            elem: e,
            anim: u,
            queue: u.opts.queue
        })),
        u.progress(u.opts.progress).done(u.opts.done, u.opts.complete).fail(u.opts.fail).always(u.opts.always)
    }
    function H(e) {
        return function(t, n) {
            "string" != typeof t && (n = t, t = "*");
            var r, i = 0,
            o = t.toLowerCase().match(je) || [];
            if (ie.isFunction(n)) for (; r = o[i++];)"+" === r.charAt(0) ? (r = r.slice(1) || "*", (e[r] = e[r] || []).unshift(n)) : (e[r] = e[r] || []).push(n)
        }
    }
    function I(e, t, n, r) {
        function i(a) {
            var l;
            return o[a] = !0,
            ie.each(e[a] || [],
            function(e, a) {
                var u = a(t, n, r);
                return "string" != typeof u || s || o[u] ? s ? !(l = u) : void 0 : (t.dataTypes.unshift(u), i(u), !1)
            }),
            l
        }
        var o = {},
        s = e === Ut;
        return i(t.dataTypes[0]) || !o["*"] && i("*")
    }
    function B(e, t) {
        var n, r, i = ie.ajaxSettings.flatOptions || {};
        for (r in t) void 0 !== t[r] && ((i[r] ? e: n || (n = {}))[r] = t[r]);
        return n && ie.extend(!0, e, n),
        e
    }
    function q(e, t, n) {
        for (var r, i, o, s, a = e.contents,
        l = e.dataTypes;
        "*" === l[0];) l.shift(),
        void 0 === i && (i = e.mimeType || t.getResponseHeader("Content-Type"));
        if (i) for (s in a) if (a[s] && a[s].test(i)) {
            l.unshift(s);
            break
        }
        if (l[0] in n) o = l[0];
        else {
            for (s in n) {
                if (!l[0] || e.converters[s + " " + l[0]]) {
                    o = s;
                    break
                }
                r || (r = s)
            }
            o = o || r
        }
        return o ? (o !== l[0] && l.unshift(o), n[o]) : void 0
    }
    function U(e, t, n, r) {
        var i, o, s, a, l, u = {},
        c = e.dataTypes.slice();
        if (c[1]) for (s in e.converters) u[s.toLowerCase()] = e.converters[s];
        for (o = c.shift(); o;) if (e.responseFields[o] && (n[e.responseFields[o]] = t), !l && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), l = o, o = c.shift()) if ("*" === o) o = l;
        else if ("*" !== l && l !== o) {
            if (s = u[l + " " + o] || u["* " + o], !s) for (i in u) if (a = i.split(" "), a[1] === o && (s = u[l + " " + a[0]] || u["* " + a[0]])) {
                s === !0 ? s = u[i] : u[i] !== !0 && (o = a[0], c.unshift(a[1]));
                break
            }
            if (s !== !0) if (s && e["throws"]) t = s(t);
            else try {
                t = s(t)
            } catch(h) {
                return {
                    state: "parsererror",
                    error: s ? h: "No conversion from " + l + " to " + o
                }
            }
        }
        return {
            state: "success",
            data: t
        }
    }
    function V(e, t, n, r) {
        var i;
        if (ie.isArray(t)) ie.each(t,
        function(t, i) {
            n || zt.test(e) ? r(e, i) : V(e + "[" + ("object" == typeof i ? t: "") + "]", i, n, r)
        });
        else if (n || "object" !== ie.type(t)) r(e, t);
        else for (i in t) V(e + "[" + i + "]", t[i], n, r)
    }
    function Q() {
        try {
            return new e.XMLHttpRequest
        } catch(t) {}
    }
    function W() {
        try {
            return new e.ActiveXObject("Microsoft.XMLHTTP")
        } catch(t) {}
    }
    function z(e) {
        return ie.isWindow(e) ? e: 9 === e.nodeType ? e.defaultView || e.parentWindow: !1
    }
    var X = [],
    G = X.slice,
    Y = X.concat,
    J = X.push,
    K = X.indexOf,
    Z = {},
    ee = Z.toString,
    te = Z.hasOwnProperty,
    ne = {},
    re = "1.11.1",
    ie = function(e, t) {
        return new ie.fn.init(e, t)
    },
    oe = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
    se = /^-ms-/,
    ae = /-([\da-z])/gi,
    le = function(e, t) {
        return t.toUpperCase()
    };
    ie.fn = ie.prototype = {
        jquery: re,
        constructor: ie,
        selector: "",
        length: 0,
        toArray: function() {
            return G.call(this)
        },
        get: function(e) {
            return null != e ? 0 > e ? this[e + this.length] : this[e] : G.call(this)
        },
        pushStack: function(e) {
            var t = ie.merge(this.constructor(), e);
            return t.prevObject = this,
            t.context = this.context,
            t
        },
        each: function(e, t) {
            return ie.each(this, e, t)
        },
        map: function(e) {
            return this.pushStack(ie.map(this,
            function(t, n) {
                return e.call(t, n, t)
            }))
        },
        slice: function() {
            return this.pushStack(G.apply(this, arguments))
        },
        first: function() {
            return this.eq(0)
        },
        last: function() {
            return this.eq( - 1)
        },
        eq: function(e) {
            var t = this.length,
            n = +e + (0 > e ? t: 0);
            return this.pushStack(n >= 0 && t > n ? [this[n]] : [])
        },
        end: function() {
            return this.prevObject || this.constructor(null)
        },
        push: J,
        sort: X.sort,
        splice: X.splice
    },
    ie.extend = ie.fn.extend = function() {
        var e, t, n, r, i, o, s = arguments[0] || {},
        a = 1,
        l = arguments.length,
        u = !1;
        for ("boolean" == typeof s && (u = s, s = arguments[a] || {},
        a++), "object" == typeof s || ie.isFunction(s) || (s = {}), a === l && (s = this, a--); l > a; a++) if (null != (i = arguments[a])) for (r in i) e = s[r],
        n = i[r],
        s !== n && (u && n && (ie.isPlainObject(n) || (t = ie.isArray(n))) ? (t ? (t = !1, o = e && ie.isArray(e) ? e: []) : o = e && ie.isPlainObject(e) ? e: {},
        s[r] = ie.extend(u, o, n)) : void 0 !== n && (s[r] = n));
        return s
    },
    ie.extend({
        expando: "jQuery" + (re + Math.random()).replace(/\D/g, ""),
        isReady: !0,
        error: function(e) {
            throw new Error(e)
        },
        noop: function() {},
        isFunction: function(e) {
            return "function" === ie.type(e)
        },
        isArray: Array.isArray ||
        function(e) {
            return "array" === ie.type(e)
        },
        isWindow: function(e) {
            return null != e && e == e.window
        },
        isNumeric: function(e) {
            return ! ie.isArray(e) && e - parseFloat(e) >= 0
        },
        isEmptyObject: function(e) {
            var t;
            for (t in e) return ! 1;
            return ! 0
        },
        isPlainObject: function(e) {
            var t;
            if (!e || "object" !== ie.type(e) || e.nodeType || ie.isWindow(e)) return ! 1;
            try {
                if (e.constructor && !te.call(e, "constructor") && !te.call(e.constructor.prototype, "isPrototypeOf")) return ! 1
            } catch(n) {
                return ! 1
            }
            if (ne.ownLast) for (t in e) return te.call(e, t);
            for (t in e);
            return void 0 === t || te.call(e, t)
        },
        type: function(e) {
            return null == e ? e + "": "object" == typeof e || "function" == typeof e ? Z[ee.call(e)] || "object": typeof e
        },
        globalEval: function(t) {
            t && ie.trim(t) && (e.execScript ||
            function(t) {
                e.eval.call(e, t)
            })(t)
        },
        camelCase: function(e) {
            return e.replace(se, "ms-").replace(ae, le)
        },
        nodeName: function(e, t) {
            return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
        },
        each: function(e, t, r) {
            var i, o = 0,
            s = e.length,
            a = n(e);
            if (r) {
                if (a) for (; s > o && (i = t.apply(e[o], r), i !== !1); o++);
                else for (o in e) if (i = t.apply(e[o], r), i === !1) break
            } else if (a) for (; s > o && (i = t.call(e[o], o, e[o]), i !== !1); o++);
            else for (o in e) if (i = t.call(e[o], o, e[o]), i === !1) break;
            return e
        },
        trim: function(e) {
            return null == e ? "": (e + "").replace(oe, "")
        },
        makeArray: function(e, t) {
            var r = t || [];
            return null != e && (n(Object(e)) ? ie.merge(r, "string" == typeof e ? [e] : e) : J.call(r, e)),
            r
        },
        inArray: function(e, t, n) {
            var r;
            if (t) {
                if (K) return K.call(t, e, n);
                for (r = t.length, n = n ? 0 > n ? Math.max(0, r + n) : n: 0; r > n; n++) if (n in t && t[n] === e) return n
            }
            return - 1
        },
        merge: function(e, t) {
            for (var n = +t.length,
            r = 0,
            i = e.length; n > r;) e[i++] = t[r++];
            if (n !== n) for (; void 0 !== t[r];) e[i++] = t[r++];
            return e.length = i,
            e
        },
        grep: function(e, t, n) {
            for (var r, i = [], o = 0, s = e.length, a = !n; s > o; o++) r = !t(e[o], o),
            r !== a && i.push(e[o]);
            return i
        },
        map: function(e, t, r) {
            var i, o = 0,
            s = e.length,
            a = n(e),
            l = [];
            if (a) for (; s > o; o++) i = t(e[o], o, r),
            null != i && l.push(i);
            else for (o in e) i = t(e[o], o, r),
            null != i && l.push(i);
            return Y.apply([], l)
        },
        guid: 1,
        proxy: function(e, t) {
            var n, r, i;
            return "string" == typeof t && (i = e[t], t = e, e = i),
            ie.isFunction(e) ? (n = G.call(arguments, 2), r = function() {
                return e.apply(t || this, n.concat(G.call(arguments)))
            },
            r.guid = e.guid = e.guid || ie.guid++, r) : void 0
        },
        now: function() {
            return + new Date
        },
        support: ne
    }),
    ie.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),
    function(e, t) {
        Z["[object " + t + "]"] = t.toLowerCase()
    });
    var ue = function(e) {
        function t(e, t, n, r) {
            var i, o, s, a, l, u, h, d, f, v;
            if ((t ? t.ownerDocument || t: I) !== A && P(t), t = t || A, n = n || [], !e || "string" != typeof e) return n;
            if (1 !== (a = t.nodeType) && 9 !== a) return [];
            if (R && !r) {
                if (i = ye.exec(e)) if (s = i[1]) {
                    if (9 === a) {
                        if (o = t.getElementById(s), !o || !o.parentNode) return n;
                        if (o.id === s) return n.push(o),
                        n
                    } else if (t.ownerDocument && (o = t.ownerDocument.getElementById(s)) && F(t, o) && o.id === s) return n.push(o),
                    n
                } else {
                    if (i[2]) return Z.apply(n, t.getElementsByTagName(e)),
                    n;
                    if ((s = i[3]) && $.getElementsByClassName && t.getElementsByClassName) return Z.apply(n, t.getElementsByClassName(s)),
                    n
                }
                if ($.qsa && (!D || !D.test(e))) {
                    if (d = h = H, f = t, v = 9 === a && e, 1 === a && "object" !== t.nodeName.toLowerCase()) {
                        for (u = T(e), (h = t.getAttribute("id")) ? d = h.replace(be, "\\$&") : t.setAttribute("id", d), d = "[id='" + d + "'] ", l = u.length; l--;) u[l] = d + p(u[l]);
                        f = je.test(e) && c(t.parentNode) || t,
                        v = u.join(",")
                    }
                    if (v) try {
                        return Z.apply(n, f.querySelectorAll(v)),
                        n
                    } catch(m) {} finally {
                        h || t.removeAttribute("id")
                    }
                }
            }
            return E(e.replace(le, "$1"), t, n, r)
        }
        function n() {
            function e(n, r) {
                return t.push(n + " ") > x.cacheLength && delete e[t.shift()],
                e[n + " "] = r
            }
            var t = [];
            return e
        }
        function r(e) {
            return e[H] = !0,
            e
        }
        function i(e) {
            var t = A.createElement("div");
            try {
                return !! e(t)
            } catch(n) {
                return ! 1
            } finally {
                t.parentNode && t.parentNode.removeChild(t),
                t = null
            }
        }
        function o(e, t) {
            for (var n = e.split("|"), r = e.length; r--;) x.attrHandle[n[r]] = t
        }
        function s(e, t) {
            var n = t && e,
            r = n && 1 === e.nodeType && 1 === t.nodeType && (~t.sourceIndex || X) - (~e.sourceIndex || X);
            if (r) return r;
            if (n) for (; n = n.nextSibling;) if (n === t) return - 1;
            return e ? 1 : -1
        }
        function a(e) {
            return function(t) {
                var n = t.nodeName.toLowerCase();
                return "input" === n && t.type === e
            }
        }
        function l(e) {
            return function(t) {
                var n = t.nodeName.toLowerCase();
                return ("input" === n || "button" === n) && t.type === e
            }
        }
        function u(e) {
            return r(function(t) {
                return t = +t,
                r(function(n, r) {
                    for (var i, o = e([], n.length, t), s = o.length; s--;) n[i = o[s]] && (n[i] = !(r[i] = n[i]))
                })
            })
        }
        function c(e) {
            return e && typeof e.getElementsByTagName !== z && e
        }
        function h() {}
        function p(e) {
            for (var t = 0,
            n = e.length,
            r = ""; n > t; t++) r += e[t].value;
            return r
        }
        function d(e, t, n) {
            var r = t.dir,
            i = n && "parentNode" === r,
            o = q++;
            return t.first ?
            function(t, n, o) {
                for (; t = t[r];) if (1 === t.nodeType || i) return e(t, n, o)
            }: function(t, n, s) {
                var a, l, u = [B, o];
                if (s) {
                    for (; t = t[r];) if ((1 === t.nodeType || i) && e(t, n, s)) return ! 0
                } else for (; t = t[r];) if (1 === t.nodeType || i) {
                    if (l = t[H] || (t[H] = {}), (a = l[r]) && a[0] === B && a[1] === o) return u[2] = a[2];
                    if (l[r] = u, u[2] = e(t, n, s)) return ! 0
                }
            }
        }
        function f(e) {
            return e.length > 1 ?
            function(t, n, r) {
                for (var i = e.length; i--;) if (!e[i](t, n, r)) return ! 1;
                return ! 0
            }: e[0]
        }
        function v(e, n, r) {
            for (var i = 0,
            o = n.length; o > i; i++) t(e, n[i], r);
            return r
        }
        function m(e, t, n, r, i) {
            for (var o, s = [], a = 0, l = e.length, u = null != t; l > a; a++)(o = e[a]) && (n && !n(o, r, i) || (s.push(o), u && t.push(a)));
            return s
        }
        function g(e, t, n, i, o, s) {
            return i && !i[H] && (i = g(i)),
            o && !o[H] && (o = g(o, s)),
            r(function(r, s, a, l) {
                var u, c, h, p = [],
                d = [],
                f = s.length,
                g = r || v(t || "*", a.nodeType ? [a] : a, []),
                y = !e || !r && t ? g: m(g, p, e, a, l),
                j = n ? o || (r ? e: f || i) ? [] : s: y;
                if (n && n(y, j, a, l), i) for (u = m(j, d), i(u, [], a, l), c = u.length; c--;)(h = u[c]) && (j[d[c]] = !(y[d[c]] = h));
                if (r) {
                    if (o || e) {
                        if (o) {
                            for (u = [], c = j.length; c--;)(h = j[c]) && u.push(y[c] = h);
                            o(null, j = [], u, l)
                        }
                        for (c = j.length; c--;)(h = j[c]) && (u = o ? te.call(r, h) : p[c]) > -1 && (r[u] = !(s[u] = h))
                    }
                } else j = m(j === s ? j.splice(f, j.length) : j),
                o ? o(null, s, j, l) : Z.apply(s, j)
            })
        }
        function y(e) {
            for (var t, n, r, i = e.length,
            o = x.relative[e[0].type], s = o || x.relative[" "], a = o ? 1 : 0, l = d(function(e) {
                return e === t
            },
            s, !0), u = d(function(e) {
                return te.call(t, e) > -1
            },
            s, !0), c = [function(e, n, r) {
                return ! o && (r || n !== _) || ((t = n).nodeType ? l(e, n, r) : u(e, n, r))
            }]; i > a; a++) if (n = x.relative[e[a].type]) c = [d(f(c), n)];
            else {
                if (n = x.filter[e[a].type].apply(null, e[a].matches), n[H]) {
                    for (r = ++a; i > r && !x.relative[e[r].type]; r++);
                    return g(a > 1 && f(c), a > 1 && p(e.slice(0, a - 1).concat({
                        value: " " === e[a - 2].type ? "*": ""
                    })).replace(le, "$1"), n, r > a && y(e.slice(a, r)), i > r && y(e = e.slice(r)), i > r && p(e))
                }
                c.push(n)
            }
            return f(c)
        }
        function j(e, n) {
            var i = n.length > 0,
            o = e.length > 0,
            s = function(r, s, a, l, u) {
                var c, h, p, d = 0,
                f = "0",
                v = r && [],
                g = [],
                y = _,
                j = r || o && x.find.TAG("*", u),
                b = B += null == y ? 1 : Math.random() || .1,
                $ = j.length;
                for (u && (_ = s !== A && s); f !== $ && null != (c = j[f]); f++) {
                    if (o && c) {
                        for (h = 0; p = e[h++];) if (p(c, s, a)) {
                            l.push(c);
                            break
                        }
                        u && (B = b)
                    }
                    i && ((c = !p && c) && d--, r && v.push(c))
                }
                if (d += f, i && f !== d) {
                    for (h = 0; p = n[h++];) p(v, g, s, a);
                    if (r) {
                        if (d > 0) for (; f--;) v[f] || g[f] || (g[f] = J.call(l));
                        g = m(g)
                    }
                    Z.apply(l, g),
                    u && !r && g.length > 0 && d + n.length > 1 && t.uniqueSort(l)
                }
                return u && (B = b, _ = y),
                v
            };
            return i ? r(s) : s
        }
        var b, $, x, w, C, T, k, E, _, S, M, P, A, N, R, D, O, L, F, H = "sizzle" + -new Date,
        I = e.document,
        B = 0,
        q = 0,
        U = n(),
        V = n(),
        Q = n(),
        W = function(e, t) {
            return e === t && (M = !0),
            0
        },
        z = "undefined",
        X = 1 << 31,
        G = {}.hasOwnProperty,
        Y = [],
        J = Y.pop,
        K = Y.push,
        Z = Y.push,
        ee = Y.slice,
        te = Y.indexOf ||
        function(e) {
            for (var t = 0,
            n = this.length; n > t; t++) if (this[t] === e) return t;
            return - 1
        },
        ne = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
        re = "[\\x20\\t\\r\\n\\f]",
        ie = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
        oe = ie.replace("w", "w#"),
        se = "\\[" + re + "*(" + ie + ")(?:" + re + "*([*^$|!~]?=)" + re + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + oe + "))|)" + re + "*\\]",
        ae = ":(" + ie + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + se + ")*)|.*)\\)|)",
        le = new RegExp("^" + re + "+|((?:^|[^\\\\])(?:\\\\.)*)" + re + "+$", "g"),
        ue = new RegExp("^" + re + "*," + re + "*"),
        ce = new RegExp("^" + re + "*([>+~]|" + re + ")" + re + "*"),
        he = new RegExp("=" + re + "*([^\\]'\"]*?)" + re + "*\\]", "g"),
        pe = new RegExp(ae),
        de = new RegExp("^" + oe + "$"),
        fe = {
            ID: new RegExp("^#(" + ie + ")"),
            CLASS: new RegExp("^\\.(" + ie + ")"),
            TAG: new RegExp("^(" + ie.replace("w", "w*") + ")"),
            ATTR: new RegExp("^" + se),
            PSEUDO: new RegExp("^" + ae),
            CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + re + "*(even|odd|(([+-]|)(\\d*)n|)" + re + "*(?:([+-]|)" + re + "*(\\d+)|))" + re + "*\\)|)", "i"),
            bool: new RegExp("^(?:" + ne + ")$", "i"),
            needsContext: new RegExp("^" + re + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + re + "*((?:-\\d)?\\d*)" + re + "*\\)|)(?=[^-]|$)", "i")
        },
        ve = /^(?:input|select|textarea|button)$/i,
        me = /^h\d$/i,
        ge = /^[^{]+\{\s*\[native \w/,
        ye = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
        je = /[+~]/,
        be = /'|\\/g,
        $e = new RegExp("\\\\([\\da-f]{1,6}" + re + "?|(" + re + ")|.)", "ig"),
        xe = function(e, t, n) {
            var r = "0x" + t - 65536;
            return r !== r || n ? t: 0 > r ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320)
        };
        try {
            Z.apply(Y = ee.call(I.childNodes), I.childNodes),
            Y[I.childNodes.length].nodeType
        } catch(we) {
            Z = {
                apply: Y.length ?
                function(e, t) {
                    K.apply(e, ee.call(t))
                }: function(e, t) {
                    for (var n = e.length,
                    r = 0; e[n++] = t[r++];);
                    e.length = n - 1
                }
            }
        }
        $ = t.support = {},
        C = t.isXML = function(e) {
            var t = e && (e.ownerDocument || e).documentElement;
            return t ? "HTML" !== t.nodeName: !1
        },
        P = t.setDocument = function(e) {
            var t, n = e ? e.ownerDocument || e: I,
            r = n.defaultView;
            return n !== A && 9 === n.nodeType && n.documentElement ? (A = n, N = n.documentElement, R = !C(n), r && r !== r.top && (r.addEventListener ? r.addEventListener("unload",
            function() {
                P()
            },
            !1) : r.attachEvent && r.attachEvent("onunload",
            function() {
                P()
            })), $.attributes = i(function(e) {
                return e.className = "i",
                !e.getAttribute("className")
            }), $.getElementsByTagName = i(function(e) {
                return e.appendChild(n.createComment("")),
                !e.getElementsByTagName("*").length
            }), $.getElementsByClassName = ge.test(n.getElementsByClassName) && i(function(e) {
                return e.innerHTML = "<div class='a'></div><div class='a i'></div>",
                e.firstChild.className = "i",
                2 === e.getElementsByClassName("i").length
            }), $.getById = i(function(e) {
                return N.appendChild(e).id = H,
                !n.getElementsByName || !n.getElementsByName(H).length
            }), $.getById ? (x.find.ID = function(e, t) {
                if (typeof t.getElementById !== z && R) {
                    var n = t.getElementById(e);
                    return n && n.parentNode ? [n] : []
                }
            },
            x.filter.ID = function(e) {
                var t = e.replace($e, xe);
                return function(e) {
                    return e.getAttribute("id") === t
                }
            }) : (delete x.find.ID, x.filter.ID = function(e) {
                var t = e.replace($e, xe);
                return function(e) {
                    var n = typeof e.getAttributeNode !== z && e.getAttributeNode("id");
                    return n && n.value === t
                }
            }), x.find.TAG = $.getElementsByTagName ?
            function(e, t) {
                return typeof t.getElementsByTagName !== z ? t.getElementsByTagName(e) : void 0
            }: function(e, t) {
                var n, r = [],
                i = 0,
                o = t.getElementsByTagName(e);
                if ("*" === e) {
                    for (; n = o[i++];) 1 === n.nodeType && r.push(n);
                    return r
                }
                return o
            },
            x.find.CLASS = $.getElementsByClassName &&
            function(e, t) {
                return typeof t.getElementsByClassName !== z && R ? t.getElementsByClassName(e) : void 0
            },
            O = [], D = [], ($.qsa = ge.test(n.querySelectorAll)) && (i(function(e) {
                e.innerHTML = "<select msallowclip=''><option selected=''></option></select>",
                e.querySelectorAll("[msallowclip^='']").length && D.push("[*^$]=" + re + "*(?:''|\"\")"),
                e.querySelectorAll("[selected]").length || D.push("\\[" + re + "*(?:value|" + ne + ")"),
                e.querySelectorAll(":checked").length || D.push(":checked")
            }), i(function(e) {
                var t = n.createElement("input");
                t.setAttribute("type", "hidden"),
                e.appendChild(t).setAttribute("name", "D"),
                e.querySelectorAll("[name=d]").length && D.push("name" + re + "*[*^$|!~]?="),
                e.querySelectorAll(":enabled").length || D.push(":enabled", ":disabled"),
                e.querySelectorAll("*,:x"),
                D.push(",.*:")
            })), ($.matchesSelector = ge.test(L = N.matches || N.webkitMatchesSelector || N.mozMatchesSelector || N.oMatchesSelector || N.msMatchesSelector)) && i(function(e) {
                $.disconnectedMatch = L.call(e, "div"),
                L.call(e, "[s!='']:x"),
                O.push("!=", ae)
            }), D = D.length && new RegExp(D.join("|")), O = O.length && new RegExp(O.join("|")), t = ge.test(N.compareDocumentPosition), F = t || ge.test(N.contains) ?
            function(e, t) {
                var n = 9 === e.nodeType ? e.documentElement: e,
                r = t && t.parentNode;
                return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)))
            }: function(e, t) {
                if (t) for (; t = t.parentNode;) if (t === e) return ! 0;
                return ! 1
            },
            W = t ?
            function(e, t) {
                if (e === t) return M = !0,
                0;
                var r = !e.compareDocumentPosition - !t.compareDocumentPosition;
                return r ? r: (r = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1, 1 & r || !$.sortDetached && t.compareDocumentPosition(e) === r ? e === n || e.ownerDocument === I && F(I, e) ? -1 : t === n || t.ownerDocument === I && F(I, t) ? 1 : S ? te.call(S, e) - te.call(S, t) : 0 : 4 & r ? -1 : 1)
            }: function(e, t) {
                if (e === t) return M = !0,
                0;
                var r, i = 0,
                o = e.parentNode,
                a = t.parentNode,
                l = [e],
                u = [t];
                if (!o || !a) return e === n ? -1 : t === n ? 1 : o ? -1 : a ? 1 : S ? te.call(S, e) - te.call(S, t) : 0;
                if (o === a) return s(e, t);
                for (r = e; r = r.parentNode;) l.unshift(r);
                for (r = t; r = r.parentNode;) u.unshift(r);
                for (; l[i] === u[i];) i++;
                return i ? s(l[i], u[i]) : l[i] === I ? -1 : u[i] === I ? 1 : 0
            },
            n) : A
        },
        t.matches = function(e, n) {
            return t(e, null, null, n)
        },
        t.matchesSelector = function(e, n) {
            if ((e.ownerDocument || e) !== A && P(e), n = n.replace(he, "='$1']"), $.matchesSelector && R && (!O || !O.test(n)) && (!D || !D.test(n))) try {
                var r = L.call(e, n);
                if (r || $.disconnectedMatch || e.document && 11 !== e.document.nodeType) return r
            } catch(i) {}
            return t(n, A, null, [e]).length > 0
        },
        t.contains = function(e, t) {
            return (e.ownerDocument || e) !== A && P(e),
            F(e, t)
        },
        t.attr = function(e, t) { (e.ownerDocument || e) !== A && P(e);
            var n = x.attrHandle[t.toLowerCase()],
            r = n && G.call(x.attrHandle, t.toLowerCase()) ? n(e, t, !R) : void 0;
            return void 0 !== r ? r: $.attributes || !R ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value: null
        },
        t.error = function(e) {
            throw new Error("Syntax error, unrecognized expression: " + e)
        },
        t.uniqueSort = function(e) {
            var t, n = [],
            r = 0,
            i = 0;
            if (M = !$.detectDuplicates, S = !$.sortStable && e.slice(0), e.sort(W), M) {
                for (; t = e[i++];) t === e[i] && (r = n.push(i));
                for (; r--;) e.splice(n[r], 1)
            }
            return S = null,
            e
        },
        w = t.getText = function(e) {
            var t, n = "",
            r = 0,
            i = e.nodeType;
            if (i) {
                if (1 === i || 9 === i || 11 === i) {
                    if ("string" == typeof e.textContent) return e.textContent;
                    for (e = e.firstChild; e; e = e.nextSibling) n += w(e)
                } else if (3 === i || 4 === i) return e.nodeValue
            } else for (; t = e[r++];) n += w(t);
            return n
        },
        x = t.selectors = {
            cacheLength: 50,
            createPseudo: r,
            match: fe,
            attrHandle: {},
            find: {},
            relative: {
                ">": {
                    dir: "parentNode",
                    first: !0
                },
                " ": {
                    dir: "parentNode"
                },
                "+": {
                    dir: "previousSibling",
                    first: !0
                },
                "~": {
                    dir: "previousSibling"
                }
            },
            preFilter: {
                ATTR: function(e) {
                    return e[1] = e[1].replace($e, xe),
                    e[3] = (e[3] || e[4] || e[5] || "").replace($e, xe),
                    "~=" === e[2] && (e[3] = " " + e[3] + " "),
                    e.slice(0, 4)
                },
                CHILD: function(e) {
                    return e[1] = e[1].toLowerCase(),
                    "nth" === e[1].slice(0, 3) ? (e[3] || t.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && t.error(e[0]),
                    e
                },
                PSEUDO: function(e) {
                    var t, n = !e[6] && e[2];
                    return fe.CHILD.test(e[0]) ? null: (e[3] ? e[2] = e[4] || e[5] || "": n && pe.test(n) && (t = T(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3))
                }
            },
            filter: {
                TAG: function(e) {
                    var t = e.replace($e, xe).toLowerCase();
                    return "*" === e ?
                    function() {
                        return ! 0
                    }: function(e) {
                        return e.nodeName && e.nodeName.toLowerCase() === t
                    }
                },
                CLASS: function(e) {
                    var t = U[e + " "];
                    return t || (t = new RegExp("(^|" + re + ")" + e + "(" + re + "|$)")) && U(e,
                    function(e) {
                        return t.test("string" == typeof e.className && e.className || typeof e.getAttribute !== z && e.getAttribute("class") || "")
                    })
                },
                ATTR: function(e, n, r) {
                    return function(i) {
                        var o = t.attr(i, e);
                        return null == o ? "!=" === n: n ? (o += "", "=" === n ? o === r: "!=" === n ? o !== r: "^=" === n ? r && 0 === o.indexOf(r) : "*=" === n ? r && o.indexOf(r) > -1 : "$=" === n ? r && o.slice( - r.length) === r: "~=" === n ? (" " + o + " ").indexOf(r) > -1 : "|=" === n ? o === r || o.slice(0, r.length + 1) === r + "-": !1) : !0
                    }
                },
                CHILD: function(e, t, n, r, i) {
                    var o = "nth" !== e.slice(0, 3),
                    s = "last" !== e.slice( - 4),
                    a = "of-type" === t;
                    return 1 === r && 0 === i ?
                    function(e) {
                        return !! e.parentNode
                    }: function(t, n, l) {
                        var u, c, h, p, d, f, v = o !== s ? "nextSibling": "previousSibling",
                        m = t.parentNode,
                        g = a && t.nodeName.toLowerCase(),
                        y = !l && !a;
                        if (m) {
                            if (o) {
                                for (; v;) {
                                    for (h = t; h = h[v];) if (a ? h.nodeName.toLowerCase() === g: 1 === h.nodeType) return ! 1;
                                    f = v = "only" === e && !f && "nextSibling"
                                }
                                return ! 0
                            }
                            if (f = [s ? m.firstChild: m.lastChild], s && y) {
                                for (c = m[H] || (m[H] = {}), u = c[e] || [], d = u[0] === B && u[1], p = u[0] === B && u[2], h = d && m.childNodes[d]; h = ++d && h && h[v] || (p = d = 0) || f.pop();) if (1 === h.nodeType && ++p && h === t) {
                                    c[e] = [B, d, p];
                                    break
                                }
                            } else if (y && (u = (t[H] || (t[H] = {}))[e]) && u[0] === B) p = u[1];
                            else for (; (h = ++d && h && h[v] || (p = d = 0) || f.pop()) && ((a ? h.nodeName.toLowerCase() !== g: 1 !== h.nodeType) || !++p || (y && ((h[H] || (h[H] = {}))[e] = [B, p]), h !== t)););
                            return p -= i,
                            p === r || p % r === 0 && p / r >= 0
                        }
                    }
                },
                PSEUDO: function(e, n) {
                    var i, o = x.pseudos[e] || x.setFilters[e.toLowerCase()] || t.error("unsupported pseudo: " + e);
                    return o[H] ? o(n) : o.length > 1 ? (i = [e, e, "", n], x.setFilters.hasOwnProperty(e.toLowerCase()) ? r(function(e, t) {
                        for (var r, i = o(e, n), s = i.length; s--;) r = te.call(e, i[s]),
                        e[r] = !(t[r] = i[s])
                    }) : function(e) {
                        return o(e, 0, i)
                    }) : o
                }
            },
            pseudos: {
                not: r(function(e) {
                    var t = [],
                    n = [],
                    i = k(e.replace(le, "$1"));
                    return i[H] ? r(function(e, t, n, r) {
                        for (var o, s = i(e, null, r, []), a = e.length; a--;)(o = s[a]) && (e[a] = !(t[a] = o))
                    }) : function(e, r, o) {
                        return t[0] = e,
                        i(t, null, o, n),
                        !n.pop()
                    }
                }),
                has: r(function(e) {
                    return function(n) {
                        return t(e, n).length > 0
                    }
                }),
                contains: r(function(e) {
                    return function(t) {
                        return (t.textContent || t.innerText || w(t)).indexOf(e) > -1
                    }
                }),
                lang: r(function(e) {
                    return de.test(e || "") || t.error("unsupported lang: " + e),
                    e = e.replace($e, xe).toLowerCase(),
                    function(t) {
                        var n;
                        do
                        if (n = R ? t.lang: t.getAttribute("xml:lang") || t.getAttribute("lang")) return n = n.toLowerCase(),
                        n === e || 0 === n.indexOf(e + "-");
                        while ((t = t.parentNode) && 1 === t.nodeType);
                        return ! 1
                    }
                }),
                target: function(t) {
                    var n = e.location && e.location.hash;
                    return n && n.slice(1) === t.id
                },
                root: function(e) {
                    return e === N
                },
                focus: function(e) {
                    return e === A.activeElement && (!A.hasFocus || A.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
                },
                enabled: function(e) {
                    return e.disabled === !1
                },
                disabled: function(e) {
                    return e.disabled === !0
                },
                checked: function(e) {
                    var t = e.nodeName.toLowerCase();
                    return "input" === t && !!e.checked || "option" === t && !!e.selected
                },
                selected: function(e) {
                    return e.parentNode && e.parentNode.selectedIndex,
                    e.selected === !0
                },
                empty: function(e) {
                    for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return ! 1;
                    return ! 0
                },
                parent: function(e) {
                    return ! x.pseudos.empty(e)
                },
                header: function(e) {
                    return me.test(e.nodeName)
                },
                input: function(e) {
                    return ve.test(e.nodeName)
                },
                button: function(e) {
                    var t = e.nodeName.toLowerCase();
                    return "input" === t && "button" === e.type || "button" === t
                },
                text: function(e) {
                    var t;
                    return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase())
                },
                first: u(function() {
                    return [0]
                }),
                last: u(function(e, t) {
                    return [t - 1]
                }),
                eq: u(function(e, t, n) {
                    return [0 > n ? n + t: n]
                }),
                even: u(function(e, t) {
                    for (var n = 0; t > n; n += 2) e.push(n);
                    return e
                }),
                odd: u(function(e, t) {
                    for (var n = 1; t > n; n += 2) e.push(n);
                    return e
                }),
                lt: u(function(e, t, n) {
                    for (var r = 0 > n ? n + t: n; --r >= 0;) e.push(r);
                    return e
                }),
                gt: u(function(e, t, n) {
                    for (var r = 0 > n ? n + t: n; ++r < t;) e.push(r);
                    return e
                })
            }
        },
        x.pseudos.nth = x.pseudos.eq;
        for (b in {
            radio: !0,
            checkbox: !0,
            file: !0,
            password: !0,
            image: !0
        }) x.pseudos[b] = a(b);
        for (b in {
            submit: !0,
            reset: !0
        }) x.pseudos[b] = l(b);
        return h.prototype = x.filters = x.pseudos,
        x.setFilters = new h,
        T = t.tokenize = function(e, n) {
            var r, i, o, s, a, l, u, c = V[e + " "];
            if (c) return n ? 0 : c.slice(0);
            for (a = e, l = [], u = x.preFilter; a;) {
                r && !(i = ue.exec(a)) || (i && (a = a.slice(i[0].length) || a), l.push(o = [])),
                r = !1,
                (i = ce.exec(a)) && (r = i.shift(), o.push({
                    value: r,
                    type: i[0].replace(le, " ")
                }), a = a.slice(r.length));
                for (s in x.filter) ! (i = fe[s].exec(a)) || u[s] && !(i = u[s](i)) || (r = i.shift(), o.push({
                    value: r,
                    type: s,
                    matches: i
                }), a = a.slice(r.length));
                if (!r) break
            }
            return n ? a.length: a ? t.error(e) : V(e, l).slice(0)
        },
        k = t.compile = function(e, t) {
            var n, r = [],
            i = [],
            o = Q[e + " "];
            if (!o) {
                for (t || (t = T(e)), n = t.length; n--;) o = y(t[n]),
                o[H] ? r.push(o) : i.push(o);
                o = Q(e, j(i, r)),
                o.selector = e
            }
            return o
        },
        E = t.select = function(e, t, n, r) {
            var i, o, s, a, l, u = "function" == typeof e && e,
            h = !r && T(e = u.selector || e);
            if (n = n || [], 1 === h.length) {
                if (o = h[0] = h[0].slice(0), o.length > 2 && "ID" === (s = o[0]).type && $.getById && 9 === t.nodeType && R && x.relative[o[1].type]) {
                    if (t = (x.find.ID(s.matches[0].replace($e, xe), t) || [])[0], !t) return n;
                    u && (t = t.parentNode),
                    e = e.slice(o.shift().value.length)
                }
                for (i = fe.needsContext.test(e) ? 0 : o.length; i--&&(s = o[i], !x.relative[a = s.type]);) if ((l = x.find[a]) && (r = l(s.matches[0].replace($e, xe), je.test(o[0].type) && c(t.parentNode) || t))) {
                    if (o.splice(i, 1), e = r.length && p(o), !e) return Z.apply(n, r),
                    n;
                    break
                }
            }
            return (u || k(e, h))(r, t, !R, n, je.test(e) && c(t.parentNode) || t),
            n
        },
        $.sortStable = H.split("").sort(W).join("") === H,
        $.detectDuplicates = !!M,
        P(),
        $.sortDetached = i(function(e) {
            return 1 & e.compareDocumentPosition(A.createElement("div"))
        }),
        i(function(e) {
            return e.innerHTML = "<a href='#'></a>",
            "#" === e.firstChild.getAttribute("href")
        }) || o("type|href|height|width",
        function(e, t, n) {
            return n ? void 0 : e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2)
        }),
        $.attributes && i(function(e) {
            return e.innerHTML = "<input/>",
            e.firstChild.setAttribute("value", ""),
            "" === e.firstChild.getAttribute("value")
        }) || o("value",
        function(e, t, n) {
            return n || "input" !== e.nodeName.toLowerCase() ? void 0 : e.defaultValue
        }),
        i(function(e) {
            return null == e.getAttribute("disabled")
        }) || o(ne,
        function(e, t, n) {
            var r;
            return n ? void 0 : e[t] === !0 ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value: null
        }),
        t
    } (e);
    ie.find = ue,
    ie.expr = ue.selectors,
    ie.expr[":"] = ie.expr.pseudos,
    ie.unique = ue.uniqueSort,
    ie.text = ue.getText,
    ie.isXMLDoc = ue.isXML,
    ie.contains = ue.contains;
    var ce = ie.expr.match.needsContext,
    he = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
    pe = /^.[^:#\[\.,]*$/;
    ie.filter = function(e, t, n) {
        var r = t[0];
        return n && (e = ":not(" + e + ")"),
        1 === t.length && 1 === r.nodeType ? ie.find.matchesSelector(r, e) ? [r] : [] : ie.find.matches(e, ie.grep(t,
        function(e) {
            return 1 === e.nodeType
        }))
    },
    ie.fn.extend({
        find: function(e) {
            var t, n = [],
            r = this,
            i = r.length;
            if ("string" != typeof e) return this.pushStack(ie(e).filter(function() {
                for (t = 0; i > t; t++) if (ie.contains(r[t], this)) return ! 0
            }));
            for (t = 0; i > t; t++) ie.find(e, r[t], n);
            return n = this.pushStack(i > 1 ? ie.unique(n) : n),
            n.selector = this.selector ? this.selector + " " + e: e,
            n
        },
        filter: function(e) {
            return this.pushStack(r(this, e || [], !1))
        },
        not: function(e) {
            return this.pushStack(r(this, e || [], !0))
        },
        is: function(e) {
            return !! r(this, "string" == typeof e && ce.test(e) ? ie(e) : e || [], !1).length
        }
    });
    var de, fe = e.document,
    ve = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
    me = ie.fn.init = function(e, t) {
        var n, r;
        if (!e) return this;
        if ("string" == typeof e) {
            if (n = "<" === e.charAt(0) && ">" === e.charAt(e.length - 1) && e.length >= 3 ? [null, e, null] : ve.exec(e), !n || !n[1] && t) return ! t || t.jquery ? (t || de).find(e) : this.constructor(t).find(e);
            if (n[1]) {
                if (t = t instanceof ie ? t[0] : t, ie.merge(this, ie.parseHTML(n[1], t && t.nodeType ? t.ownerDocument || t: fe, !0)), he.test(n[1]) && ie.isPlainObject(t)) for (n in t) ie.isFunction(this[n]) ? this[n](t[n]) : this.attr(n, t[n]);
                return this
            }
            if (r = fe.getElementById(n[2]), r && r.parentNode) {
                if (r.id !== n[2]) return de.find(e);
                this.length = 1,
                this[0] = r
            }
            return this.context = fe,
            this.selector = e,
            this
        }
        return e.nodeType ? (this.context = this[0] = e, this.length = 1, this) : ie.isFunction(e) ? "undefined" != typeof de.ready ? de.ready(e) : e(ie) : (void 0 !== e.selector && (this.selector = e.selector, this.context = e.context), ie.makeArray(e, this))
    };
    me.prototype = ie.fn,
    de = ie(fe);
    var ge = /^(?:parents|prev(?:Until|All))/,
    ye = {
        children: !0,
        contents: !0,
        next: !0,
        prev: !0
    };
    ie.extend({
        dir: function(e, t, n) {
            for (var r = [], i = e[t]; i && 9 !== i.nodeType && (void 0 === n || 1 !== i.nodeType || !ie(i).is(n));) 1 === i.nodeType && r.push(i),
            i = i[t];
            return r
        },
        sibling: function(e, t) {
            for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
            return n
        }
    }),
    ie.fn.extend({
        has: function(e) {
            var t, n = ie(e, this),
            r = n.length;
            return this.filter(function() {
                for (t = 0; r > t; t++) if (ie.contains(this, n[t])) return ! 0
            })
        },
        closest: function(e, t) {
            for (var n, r = 0,
            i = this.length,
            o = [], s = ce.test(e) || "string" != typeof e ? ie(e, t || this.context) : 0; i > r; r++) for (n = this[r]; n && n !== t; n = n.parentNode) if (n.nodeType < 11 && (s ? s.index(n) > -1 : 1 === n.nodeType && ie.find.matchesSelector(n, e))) {
                o.push(n);
                break
            }
            return this.pushStack(o.length > 1 ? ie.unique(o) : o)
        },
        index: function(e) {
            return e ? "string" == typeof e ? ie.inArray(this[0], ie(e)) : ie.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.first().prevAll().length: -1
        },
        add: function(e, t) {
            return this.pushStack(ie.unique(ie.merge(this.get(), ie(e, t))))
        },
        addBack: function(e) {
            return this.add(null == e ? this.prevObject: this.prevObject.filter(e))
        }
    }),
    ie.each({
        parent: function(e) {
            var t = e.parentNode;
            return t && 11 !== t.nodeType ? t: null
        },
        parents: function(e) {
            return ie.dir(e, "parentNode")
        },
        parentsUntil: function(e, t, n) {
            return ie.dir(e, "parentNode", n)
        },
        next: function(e) {
            return i(e, "nextSibling")
        },
        prev: function(e) {
            return i(e, "previousSibling")
        },
        nextAll: function(e) {
            return ie.dir(e, "nextSibling")
        },
        prevAll: function(e) {
            return ie.dir(e, "previousSibling")
        },
        nextUntil: function(e, t, n) {
            return ie.dir(e, "nextSibling", n)
        },
        prevUntil: function(e, t, n) {
            return ie.dir(e, "previousSibling", n)
        },
        siblings: function(e) {
            return ie.sibling((e.parentNode || {}).firstChild, e)
        },
        children: function(e) {
            return ie.sibling(e.firstChild)
        },
        contents: function(e) {
            return ie.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document: ie.merge([], e.childNodes)
        }
    },
    function(e, t) {
        ie.fn[e] = function(n, r) {
            var i = ie.map(this, t, n);
            return "Until" !== e.slice( - 5) && (r = n),
            r && "string" == typeof r && (i = ie.filter(r, i)),
            this.length > 1 && (ye[e] || (i = ie.unique(i)), ge.test(e) && (i = i.reverse())),
            this.pushStack(i)
        }
    });
    var je = /\S+/g,
    be = {};
    ie.Callbacks = function(e) {
        e = "string" == typeof e ? be[e] || o(e) : ie.extend({},
        e);
        var t, n, r, i, s, a, l = [],
        u = !e.once && [],
        c = function(o) {
            for (n = e.memory && o, r = !0, s = a || 0, a = 0, i = l.length, t = !0; l && i > s; s++) if (l[s].apply(o[0], o[1]) === !1 && e.stopOnFalse) {
                n = !1;
                break
            }
            t = !1,
            l && (u ? u.length && c(u.shift()) : n ? l = [] : h.disable())
        },
        h = {
            add: function() {
                if (l) {
                    var r = l.length; !
                    function o(t) {
                        ie.each(t,
                        function(t, n) {
                            var r = ie.type(n);
                            "function" === r ? e.unique && h.has(n) || l.push(n) : n && n.length && "string" !== r && o(n)
                        })
                    } (arguments),
                    t ? i = l.length: n && (a = r, c(n))
                }
                return this
            },
            remove: function() {
                return l && ie.each(arguments,
                function(e, n) {
                    for (var r; (r = ie.inArray(n, l, r)) > -1;) l.splice(r, 1),
                    t && (i >= r && i--, s >= r && s--)
                }),
                this
            },
            has: function(e) {
                return e ? ie.inArray(e, l) > -1 : !(!l || !l.length)
            },
            empty: function() {
                return l = [],
                i = 0,
                this
            },
            disable: function() {
                return l = u = n = void 0,
                this
            },
            disabled: function() {
                return ! l
            },
            lock: function() {
                return u = void 0,
                n || h.disable(),
                this
            },
            locked: function() {
                return ! u
            },
            fireWith: function(e, n) {
                return ! l || r && !u || (n = n || [], n = [e, n.slice ? n.slice() : n], t ? u.push(n) : c(n)),
                this
            },
            fire: function() {
                return h.fireWith(this, arguments),
                this
            },
            fired: function() {
                return !! r
            }
        };
        return h
    },
    ie.extend({
        Deferred: function(e) {
            var t = [["resolve", "done", ie.Callbacks("once memory"), "resolved"], ["reject", "fail", ie.Callbacks("once memory"), "rejected"], ["notify", "progress", ie.Callbacks("memory")]],
            n = "pending",
            r = {
                state: function() {
                    return n
                },
                always: function() {
                    return i.done(arguments).fail(arguments),
                    this
                },
                then: function() {
                    var e = arguments;
                    return ie.Deferred(function(n) {
                        ie.each(t,
                        function(t, o) {
                            var s = ie.isFunction(e[t]) && e[t];
                            i[o[1]](function() {
                                var e = s && s.apply(this, arguments);
                                e && ie.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[o[0] + "With"](this === r ? n.promise() : this, s ? [e] : arguments)
                            })
                        }),
                        e = null
                    }).promise()
                },
                promise: function(e) {
                    return null != e ? ie.extend(e, r) : r
                }
            },
            i = {};
            return r.pipe = r.then,
            ie.each(t,
            function(e, o) {
                var s = o[2],
                a = o[3];
                r[o[1]] = s.add,
                a && s.add(function() {
                    n = a
                },
                t[1 ^ e][2].disable, t[2][2].lock),
                i[o[0]] = function() {
                    return i[o[0] + "With"](this === i ? r: this, arguments),
                    this
                },
                i[o[0] + "With"] = s.fireWith
            }),
            r.promise(i),
            e && e.call(i, i),
            i
        },
        when: function(e) {
            var t, n, r, i = 0,
            o = G.call(arguments),
            s = o.length,
            a = 1 !== s || e && ie.isFunction(e.promise) ? s: 0,
            l = 1 === a ? e: ie.Deferred(),
            u = function(e, n, r) {
                return function(i) {
                    n[e] = this,
                    r[e] = arguments.length > 1 ? G.call(arguments) : i,
                    r === t ? l.notifyWith(n, r) : --a || l.resolveWith(n, r)
                }
            };
            if (s > 1) for (t = new Array(s), n = new Array(s), r = new Array(s); s > i; i++) o[i] && ie.isFunction(o[i].promise) ? o[i].promise().done(u(i, r, o)).fail(l.reject).progress(u(i, n, t)) : --a;
            return a || l.resolveWith(r, o),
            l.promise()
        }
    });
    var $e;
    ie.fn.ready = function(e) {
        return ie.ready.promise().done(e),
        this
    },
    ie.extend({
        isReady: !1,
        readyWait: 1,
        holdReady: function(e) {
            e ? ie.readyWait++:ie.ready(!0)
        },
        ready: function(e) {
            if (e === !0 ? !--ie.readyWait: !ie.isReady) {
                if (!fe.body) return setTimeout(ie.ready);
                ie.isReady = !0,
                e !== !0 && --ie.readyWait > 0 || ($e.resolveWith(fe, [ie]), ie.fn.triggerHandler && (ie(fe).triggerHandler("ready"), ie(fe).off("ready")))
            }
        }
    }),
    ie.ready.promise = function(t) {
        if (!$e) if ($e = ie.Deferred(), "complete" === fe.readyState) setTimeout(ie.ready);
        else if (fe.addEventListener) fe.addEventListener("DOMContentLoaded", a, !1),
        e.addEventListener("load", a, !1);
        else {
            fe.attachEvent("onreadystatechange", a),
            e.attachEvent("onload", a);
            var n = !1;
            try {
                n = null == e.frameElement && fe.documentElement
            } catch(r) {}
            n && n.doScroll && !
            function i() {
                if (!ie.isReady) {
                    try {
                        n.doScroll("left")
                    } catch(e) {
                        return setTimeout(i, 50)
                    }
                    s(),
                    ie.ready()
                }
            } ()
        }
        return $e.promise(t)
    };
    var xe, we = "undefined";
    for (xe in ie(ne)) break;
    ne.ownLast = "0" !== xe,
    ne.inlineBlockNeedsLayout = !1,
    ie(function() {
        var e, t, n, r;
        n = fe.getElementsByTagName("body")[0],
        n && n.style && (t = fe.createElement("div"), r = fe.createElement("div"), r.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", n.appendChild(r).appendChild(t), typeof t.style.zoom !== we && (t.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1", ne.inlineBlockNeedsLayout = e = 3 === t.offsetWidth, e && (n.style.zoom = 1)), n.removeChild(r))
    }),
    function() {
        var e = fe.createElement("div");
        if (null == ne.deleteExpando) {
            ne.deleteExpando = !0;
            try {
                delete e.test
            } catch(t) {
                ne.deleteExpando = !1
            }
        }
        e = null
    } (),
    ie.acceptData = function(e) {
        var t = ie.noData[(e.nodeName + " ").toLowerCase()],
        n = +e.nodeType || 1;
        return 1 !== n && 9 !== n ? !1 : !t || t !== !0 && e.getAttribute("classid") === t
    };
    var Ce = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
    Te = /([A-Z])/g;
    ie.extend({
        cache: {},
        noData: {
            "applet ": !0,
            "embed ": !0,
            "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
        },
        hasData: function(e) {
            return e = e.nodeType ? ie.cache[e[ie.expando]] : e[ie.expando],
            !!e && !u(e)
        },
        data: function(e, t, n) {
            return c(e, t, n)
        },
        removeData: function(e, t) {
            return h(e, t)
        },
        _data: function(e, t, n) {
            return c(e, t, n, !0)
        },
        _removeData: function(e, t) {
            return h(e, t, !0)
        }
    }),
    ie.fn.extend({
        data: function(e, t) {
            var n, r, i, o = this[0],
            s = o && o.attributes;
            if (void 0 === e) {
                if (this.length && (i = ie.data(o), 1 === o.nodeType && !ie._data(o, "parsedAttrs"))) {
                    for (n = s.length; n--;) s[n] && (r = s[n].name, 0 === r.indexOf("data-") && (r = ie.camelCase(r.slice(5)), l(o, r, i[r])));
                    ie._data(o, "parsedAttrs", !0)
                }
                return i
            }
            return "object" == typeof e ? this.each(function() {
                ie.data(this, e)
            }) : arguments.length > 1 ? this.each(function() {
                ie.data(this, e, t)
            }) : o ? l(o, e, ie.data(o, e)) : void 0
        },
        removeData: function(e) {
            return this.each(function() {
                ie.removeData(this, e)
            })
        }
    }),
    ie.extend({
        queue: function(e, t, n) {
            var r;
            return e ? (t = (t || "fx") + "queue", r = ie._data(e, t), n && (!r || ie.isArray(n) ? r = ie._data(e, t, ie.makeArray(n)) : r.push(n)), r || []) : void 0
        },
        dequeue: function(e, t) {
            t = t || "fx";
            var n = ie.queue(e, t),
            r = n.length,
            i = n.shift(),
            o = ie._queueHooks(e, t),
            s = function() {
                ie.dequeue(e, t)
            };
            "inprogress" === i && (i = n.shift(), r--),
            i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, s, o)),
            !r && o && o.empty.fire()
        },
        _queueHooks: function(e, t) {
            var n = t + "queueHooks";
            return ie._data(e, n) || ie._data(e, n, {
                empty: ie.Callbacks("once memory").add(function() {
                    ie._removeData(e, t + "queue"),
                    ie._removeData(e, n)
                })
            })
        }
    }),
    ie.fn.extend({
        queue: function(e, t) {
            var n = 2;
            return "string" != typeof e && (t = e, e = "fx", n--),
            arguments.length < n ? ie.queue(this[0], e) : void 0 === t ? this: this.each(function() {
                var n = ie.queue(this, e, t);
                ie._queueHooks(this, e),
                "fx" === e && "inprogress" !== n[0] && ie.dequeue(this, e)
            })
        },
        dequeue: function(e) {
            return this.each(function() {
                ie.dequeue(this, e)
            })
        },
        clearQueue: function(e) {
            return this.queue(e || "fx", [])
        },
        promise: function(e, t) {
            var n, r = 1,
            i = ie.Deferred(),
            o = this,
            s = this.length,
            a = function() {--r || i.resolveWith(o, [o])
            };
            for ("string" != typeof e && (t = e, e = void 0), e = e || "fx"; s--;) n = ie._data(o[s], e + "queueHooks"),
            n && n.empty && (r++, n.empty.add(a));
            return a(),
            i.promise(t)
        }
    });
    var ke = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
    Ee = ["Top", "Right", "Bottom", "Left"],
    _e = function(e, t) {
        return e = t || e,
        "none" === ie.css(e, "display") || !ie.contains(e.ownerDocument, e)
    },
    Se = ie.access = function(e, t, n, r, i, o, s) {
        var a = 0,
        l = e.length,
        u = null == n;
        if ("object" === ie.type(n)) {
            i = !0;
            for (a in n) ie.access(e, t, a, n[a], !0, o, s)
        } else if (void 0 !== r && (i = !0, ie.isFunction(r) || (s = !0), u && (s ? (t.call(e, r), t = null) : (u = t, t = function(e, t, n) {
            return u.call(ie(e), n)
        })), t)) for (; l > a; a++) t(e[a], n, s ? r: r.call(e[a], a, t(e[a], n)));
        return i ? e: u ? t.call(e) : l ? t(e[0], n) : o
    },
    Me = /^(?:checkbox|radio)$/i; !
    function() {
        var e = fe.createElement("input"),
        t = fe.createElement("div"),
        n = fe.createDocumentFragment();
        if (t.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", ne.leadingWhitespace = 3 === t.firstChild.nodeType, ne.tbody = !t.getElementsByTagName("tbody").length, ne.htmlSerialize = !!t.getElementsByTagName("link").length, ne.html5Clone = "<:nav></:nav>" !== fe.createElement("nav").cloneNode(!0).outerHTML, e.type = "checkbox", e.checked = !0, n.appendChild(e), ne.appendChecked = e.checked, t.innerHTML = "<textarea>x</textarea>", ne.noCloneChecked = !!t.cloneNode(!0).lastChild.defaultValue, n.appendChild(t), t.innerHTML = "<input type='radio' checked='checked' name='t'/>", ne.checkClone = t.cloneNode(!0).cloneNode(!0).lastChild.checked, ne.noCloneEvent = !0, t.attachEvent && (t.attachEvent("onclick",
        function() {
            ne.noCloneEvent = !1
        }), t.cloneNode(!0).click()), null == ne.deleteExpando) {
            ne.deleteExpando = !0;
            try {
                delete t.test
            } catch(r) {
                ne.deleteExpando = !1
            }
        }
    } (),
    function() {
        var t, n, r = fe.createElement("div");
        for (t in {
            submit: !0,
            change: !0,
            focusin: !0
        }) n = "on" + t,
        (ne[t + "Bubbles"] = n in e) || (r.setAttribute(n, "t"), ne[t + "Bubbles"] = r.attributes[n].expando === !1);
        r = null
    } ();
    var Pe = /^(?:input|select|textarea)$/i,
    Ae = /^key/,
    Ne = /^(?:mouse|pointer|contextmenu)|click/,
    Re = /^(?:focusinfocus|focusoutblur)$/,
    De = /^([^.]*)(?:\.(.+)|)$/;
    ie.event = {
        global: {},
        add: function(e, t, n, r, i) {
            var o, s, a, l, u, c, h, p, d, f, v, m = ie._data(e);
            if (m) {
                for (n.handler && (l = n, n = l.handler, i = l.selector), n.guid || (n.guid = ie.guid++), (s = m.events) || (s = m.events = {}), (c = m.handle) || (c = m.handle = function(e) {
                    return typeof ie === we || e && ie.event.triggered === e.type ? void 0 : ie.event.dispatch.apply(c.elem, arguments)
                },
                c.elem = e), t = (t || "").match(je) || [""], a = t.length; a--;) o = De.exec(t[a]) || [],
                d = v = o[1],
                f = (o[2] || "").split(".").sort(),
                d && (u = ie.event.special[d] || {},
                d = (i ? u.delegateType: u.bindType) || d, u = ie.event.special[d] || {},
                h = ie.extend({
                    type: d,
                    origType: v,
                    data: r,
                    handler: n,
                    guid: n.guid,
                    selector: i,
                    needsContext: i && ie.expr.match.needsContext.test(i),
                    namespace: f.join(".")
                },
                l), (p = s[d]) || (p = s[d] = [], p.delegateCount = 0, u.setup && u.setup.call(e, r, f, c) !== !1 || (e.addEventListener ? e.addEventListener(d, c, !1) : e.attachEvent && e.attachEvent("on" + d, c))), u.add && (u.add.call(e, h), h.handler.guid || (h.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, h) : p.push(h), ie.event.global[d] = !0);
                e = null
            }
        },
        remove: function(e, t, n, r, i) {
            var o, s, a, l, u, c, h, p, d, f, v, m = ie.hasData(e) && ie._data(e);
            if (m && (c = m.events)) {
                for (t = (t || "").match(je) || [""], u = t.length; u--;) if (a = De.exec(t[u]) || [], d = v = a[1], f = (a[2] || "").split(".").sort(), d) {
                    for (h = ie.event.special[d] || {},
                    d = (r ? h.delegateType: h.bindType) || d, p = c[d] || [], a = a[2] && new RegExp("(^|\\.)" + f.join("\\.(?:.*\\.|)") + "(\\.|$)"), l = o = p.length; o--;) s = p[o],
                    !i && v !== s.origType || n && n.guid !== s.guid || a && !a.test(s.namespace) || r && r !== s.selector && ("**" !== r || !s.selector) || (p.splice(o, 1), s.selector && p.delegateCount--, h.remove && h.remove.call(e, s));
                    l && !p.length && (h.teardown && h.teardown.call(e, f, m.handle) !== !1 || ie.removeEvent(e, d, m.handle), delete c[d])
                } else for (d in c) ie.event.remove(e, d + t[u], n, r, !0);
                ie.isEmptyObject(c) && (delete m.handle, ie._removeData(e, "events"))
            }
        },
        trigger: function(t, n, r, i) {
            var o, s, a, l, u, c, h, p = [r || fe],
            d = te.call(t, "type") ? t.type: t,
            f = te.call(t, "namespace") ? t.namespace.split(".") : [];
            if (a = c = r = r || fe, 3 !== r.nodeType && 8 !== r.nodeType && !Re.test(d + ie.event.triggered) && (d.indexOf(".") >= 0 && (f = d.split("."), d = f.shift(), f.sort()), s = d.indexOf(":") < 0 && "on" + d, t = t[ie.expando] ? t: new ie.Event(d, "object" == typeof t && t), t.isTrigger = i ? 2 : 3, t.namespace = f.join("."), t.namespace_re = t.namespace ? new RegExp("(^|\\.)" + f.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, t.result = void 0, t.target || (t.target = r), n = null == n ? [t] : ie.makeArray(n, [t]), u = ie.event.special[d] || {},
            i || !u.trigger || u.trigger.apply(r, n) !== !1)) {
                if (!i && !u.noBubble && !ie.isWindow(r)) {
                    for (l = u.delegateType || d, Re.test(l + d) || (a = a.parentNode); a; a = a.parentNode) p.push(a),
                    c = a;
                    c === (r.ownerDocument || fe) && p.push(c.defaultView || c.parentWindow || e)
                }
                for (h = 0; (a = p[h++]) && !t.isPropagationStopped();) t.type = h > 1 ? l: u.bindType || d,
                o = (ie._data(a, "events") || {})[t.type] && ie._data(a, "handle"),
                o && o.apply(a, n),
                o = s && a[s],
                o && o.apply && ie.acceptData(a) && (t.result = o.apply(a, n), t.result === !1 && t.preventDefault());
                if (t.type = d, !i && !t.isDefaultPrevented() && (!u._default || u._default.apply(p.pop(), n) === !1) && ie.acceptData(r) && s && r[d] && !ie.isWindow(r)) {
                    c = r[s],
                    c && (r[s] = null),
                    ie.event.triggered = d;
                    try {
                        r[d]()
                    } catch(v) {}
                    ie.event.triggered = void 0,
                    c && (r[s] = c)
                }
                return t.result
            }
        },
        dispatch: function(e) {
            e = ie.event.fix(e);
            var t, n, r, i, o, s = [],
            a = G.call(arguments),
            l = (ie._data(this, "events") || {})[e.type] || [],
            u = ie.event.special[e.type] || {};
            if (a[0] = e, e.delegateTarget = this, !u.preDispatch || u.preDispatch.call(this, e) !== !1) {
                for (s = ie.event.handlers.call(this, e, l), t = 0; (i = s[t++]) && !e.isPropagationStopped();) for (e.currentTarget = i.elem, o = 0; (r = i.handlers[o++]) && !e.isImmediatePropagationStopped();) e.namespace_re && !e.namespace_re.test(r.namespace) || (e.handleObj = r, e.data = r.data, n = ((ie.event.special[r.origType] || {}).handle || r.handler).apply(i.elem, a), void 0 !== n && (e.result = n) === !1 && (e.preventDefault(), e.stopPropagation()));
                return u.postDispatch && u.postDispatch.call(this, e),
                e.result
            }
        },
        handlers: function(e, t) {
            var n, r, i, o, s = [],
            a = t.delegateCount,
            l = e.target;
            if (a && l.nodeType && (!e.button || "click" !== e.type)) for (; l != this; l = l.parentNode || this) if (1 === l.nodeType && (l.disabled !== !0 || "click" !== e.type)) {
                for (i = [], o = 0; a > o; o++) r = t[o],
                n = r.selector + " ",
                void 0 === i[n] && (i[n] = r.needsContext ? ie(n, this).index(l) >= 0 : ie.find(n, this, null, [l]).length),
                i[n] && i.push(r);
                i.length && s.push({
                    elem: l,
                    handlers: i
                })
            }
            return a < t.length && s.push({
                elem: this,
                handlers: t.slice(a)
            }),
            s
        },
        fix: function(e) {
            if (e[ie.expando]) return e;
            var t, n, r, i = e.type,
            o = e,
            s = this.fixHooks[i];
            for (s || (this.fixHooks[i] = s = Ne.test(i) ? this.mouseHooks: Ae.test(i) ? this.keyHooks: {}), r = s.props ? this.props.concat(s.props) : this.props, e = new ie.Event(o), t = r.length; t--;) n = r[t],
            e[n] = o[n];
            return e.target || (e.target = o.srcElement || fe),
            3 === e.target.nodeType && (e.target = e.target.parentNode),
            e.metaKey = !!e.metaKey,
            s.filter ? s.filter(e, o) : e
        },
        props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
        fixHooks: {},
        keyHooks: {
            props: "char charCode key keyCode".split(" "),
            filter: function(e, t) {
                return null == e.which && (e.which = null != t.charCode ? t.charCode: t.keyCode),
                e
            }
        },
        mouseHooks: {
            props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
            filter: function(e, t) {
                var n, r, i, o = t.button,
                s = t.fromElement;
                return null == e.pageX && null != t.clientX && (r = e.target.ownerDocument || fe, i = r.documentElement, n = r.body, e.pageX = t.clientX + (i && i.scrollLeft || n && n.scrollLeft || 0) - (i && i.clientLeft || n && n.clientLeft || 0), e.pageY = t.clientY + (i && i.scrollTop || n && n.scrollTop || 0) - (i && i.clientTop || n && n.clientTop || 0)),
                !e.relatedTarget && s && (e.relatedTarget = s === e.target ? t.toElement: s),
                e.which || void 0 === o || (e.which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0),
                e
            }
        },
        special: {
            load: {
                noBubble: !0
            },
            focus: {
                trigger: function() {
                    if (this !== f() && this.focus) try {
                        return this.focus(),
                        !1
                    } catch(e) {}
                },
                delegateType: "focusin"
            },
            blur: {
                trigger: function() {
                    return this === f() && this.blur ? (this.blur(), !1) : void 0
                },
                delegateType: "focusout"
            },
            click: {
                trigger: function() {
                    return ie.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0
                },
                _default: function(e) {
                    return ie.nodeName(e.target, "a")
                }
            },
            beforeunload: {
                postDispatch: function(e) {
                    void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result)
                }
            }
        },
        simulate: function(e, t, n, r) {
            var i = ie.extend(new ie.Event, n, {
                type: e,
                isSimulated: !0,
                originalEvent: {}
            });
            r ? ie.event.trigger(i, null, t) : ie.event.dispatch.call(t, i),
            i.isDefaultPrevented() && n.preventDefault()
        }
    },
    ie.removeEvent = fe.removeEventListener ?
    function(e, t, n) {
        e.removeEventListener && e.removeEventListener(t, n, !1)
    }: function(e, t, n) {
        var r = "on" + t;
        e.detachEvent && (typeof e[r] === we && (e[r] = null), e.detachEvent(r, n))
    },
    ie.Event = function(e, t) {
        return this instanceof ie.Event ? (e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && e.returnValue === !1 ? p: d) : this.type = e, t && ie.extend(this, t), this.timeStamp = e && e.timeStamp || ie.now(), void(this[ie.expando] = !0)) : new ie.Event(e, t)
    },
    ie.Event.prototype = {
        isDefaultPrevented: d,
        isPropagationStopped: d,
        isImmediatePropagationStopped: d,
        preventDefault: function() {
            var e = this.originalEvent;
            this.isDefaultPrevented = p,
            e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1)
        },
        stopPropagation: function() {
            var e = this.originalEvent;
            this.isPropagationStopped = p,
            e && (e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0)
        },
        stopImmediatePropagation: function() {
            var e = this.originalEvent;
            this.isImmediatePropagationStopped = p,
            e && e.stopImmediatePropagation && e.stopImmediatePropagation(),
            this.stopPropagation()
        }
    },
    ie.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout",
        pointerenter: "pointerover",
        pointerleave: "pointerout"
    },
    function(e, t) {
        ie.event.special[e] = {
            delegateType: t,
            bindType: t,
            handle: function(e) {
                var n, r = this,
                i = e.relatedTarget,
                o = e.handleObj;
                return i && (i === r || ie.contains(r, i)) || (e.type = o.origType, n = o.handler.apply(this, arguments), e.type = t),
                n
            }
        }
    }),
    ne.submitBubbles || (ie.event.special.submit = {
        setup: function() {
            return ie.nodeName(this, "form") ? !1 : void ie.event.add(this, "click._submit keypress._submit",
            function(e) {
                var t = e.target,
                n = ie.nodeName(t, "input") || ie.nodeName(t, "button") ? t.form: void 0;
                n && !ie._data(n, "submitBubbles") && (ie.event.add(n, "submit._submit",
                function(e) {
                    e._submit_bubble = !0
                }), ie._data(n, "submitBubbles", !0))
            })
        },
        postDispatch: function(e) {
            e._submit_bubble && (delete e._submit_bubble, this.parentNode && !e.isTrigger && ie.event.simulate("submit", this.parentNode, e, !0))
        },
        teardown: function() {
            return ie.nodeName(this, "form") ? !1 : void ie.event.remove(this, "._submit")
        }
    }),
    ne.changeBubbles || (ie.event.special.change = {
        setup: function() {
            return Pe.test(this.nodeName) ? ("checkbox" !== this.type && "radio" !== this.type || (ie.event.add(this, "propertychange._change",
            function(e) {
                "checked" === e.originalEvent.propertyName && (this._just_changed = !0)
            }), ie.event.add(this, "click._change",
            function(e) {
                this._just_changed && !e.isTrigger && (this._just_changed = !1),
                ie.event.simulate("change", this, e, !0)
            })), !1) : void ie.event.add(this, "beforeactivate._change",
            function(e) {
                var t = e.target;
                Pe.test(t.nodeName) && !ie._data(t, "changeBubbles") && (ie.event.add(t, "change._change",
                function(e) { ! this.parentNode || e.isSimulated || e.isTrigger || ie.event.simulate("change", this.parentNode, e, !0)
                }), ie._data(t, "changeBubbles", !0))
            })
        },
        handle: function(e) {
            var t = e.target;
            return this !== t || e.isSimulated || e.isTrigger || "radio" !== t.type && "checkbox" !== t.type ? e.handleObj.handler.apply(this, arguments) : void 0
        },
        teardown: function() {
            return ie.event.remove(this, "._change"),
            !Pe.test(this.nodeName)
        }
    }),
    ne.focusinBubbles || ie.each({
        focus: "focusin",
        blur: "focusout"
    },
    function(e, t) {
        var n = function(e) {
            ie.event.simulate(t, e.target, ie.event.fix(e), !0)
        };
        ie.event.special[t] = {
            setup: function() {
                var r = this.ownerDocument || this,
                i = ie._data(r, t);
                i || r.addEventListener(e, n, !0),
                ie._data(r, t, (i || 0) + 1)
            },
            teardown: function() {
                var r = this.ownerDocument || this,
                i = ie._data(r, t) - 1;
                i ? ie._data(r, t, i) : (r.removeEventListener(e, n, !0), ie._removeData(r, t))
            }
        }
    }),
    ie.fn.extend({
        on: function(e, t, n, r, i) {
            var o, s;
            if ("object" == typeof e) {
                "string" != typeof t && (n = n || t, t = void 0);
                for (o in e) this.on(o, t, n, e[o], i);
                return this
            }
            if (null == n && null == r ? (r = t, n = t = void 0) : null == r && ("string" == typeof t ? (r = n, n = void 0) : (r = n, n = t, t = void 0)), r === !1) r = d;
            else if (!r) return this;
            return 1 === i && (s = r, r = function(e) {
                return ie().off(e),
                s.apply(this, arguments)
            },
            r.guid = s.guid || (s.guid = ie.guid++)),
            this.each(function() {
                ie.event.add(this, e, r, n, t)
            })
        },
        one: function(e, t, n, r) {
            return this.on(e, t, n, r, 1)
        },
        off: function(e, t, n) {
            var r, i;
            if (e && e.preventDefault && e.handleObj) return r = e.handleObj,
            ie(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace: r.origType, r.selector, r.handler),
            this;
            if ("object" == typeof e) {
                for (i in e) this.off(i, t, e[i]);
                return this
            }
            return t !== !1 && "function" != typeof t || (n = t, t = void 0),
            n === !1 && (n = d),
            this.each(function() {
                ie.event.remove(this, e, n, t)
            })
        },
        trigger: function(e, t) {
            return this.each(function() {
                ie.event.trigger(e, t, this)
            })
        },
        triggerHandler: function(e, t) {
            var n = this[0];
            return n ? ie.event.trigger(e, t, n, !0) : void 0
        }
    });
    var Oe = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
    Le = / jQuery\d+="(?:null|\d+)"/g,
    Fe = new RegExp("<(?:" + Oe + ")[\\s/>]", "i"),
    He = /^\s+/,
    Ie = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
    Be = /<([\w:]+)/,
    qe = /<tbody/i,
    Ue = /<|&#?\w+;/,
    Ve = /<(?:script|style|link)/i,
    Qe = /checked\s*(?:[^=]|=\s*.checked.)/i,
    We = /^$|\/(?:java|ecma)script/i,
    ze = /^true\/(.*)/,
    Xe = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
    Ge = {
        option: [1, "<select multiple='multiple'>", "</select>"],
        legend: [1, "<fieldset>", "</fieldset>"],
        area: [1, "<map>", "</map>"],
        param: [1, "<object>", "</object>"],
        thead: [1, "<table>", "</table>"],
        tr: [2, "<table><tbody>", "</tbody></table>"],
        col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
        td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
        _default: ne.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
    },
    Ye = v(fe),
    Je = Ye.appendChild(fe.createElement("div"));
    Ge.optgroup = Ge.option,
    Ge.tbody = Ge.tfoot = Ge.colgroup = Ge.caption = Ge.thead,
    Ge.th = Ge.td,
    ie.extend({
        clone: function(e, t, n) {
            var r, i, o, s, a, l = ie.contains(e.ownerDocument, e);
            if (ne.html5Clone || ie.isXMLDoc(e) || !Fe.test("<" + e.nodeName + ">") ? o = e.cloneNode(!0) : (Je.innerHTML = e.outerHTML, Je.removeChild(o = Je.firstChild)), !(ne.noCloneEvent && ne.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || ie.isXMLDoc(e))) for (r = m(o), a = m(e), s = 0; null != (i = a[s]); ++s) r[s] && w(i, r[s]);
            if (t) if (n) for (a = a || m(e), r = r || m(o), s = 0; null != (i = a[s]); s++) x(i, r[s]);
            else x(e, o);
            return r = m(o, "script"),
            r.length > 0 && $(r, !l && m(e, "script")),
            r = a = i = null,
            o
        },
        buildFragment: function(e, t, n, r) {
            for (var i, o, s, a, l, u, c, h = e.length,
            p = v(t), d = [], f = 0; h > f; f++) if (o = e[f], o || 0 === o) if ("object" === ie.type(o)) ie.merge(d, o.nodeType ? [o] : o);
            else if (Ue.test(o)) {
                for (a = a || p.appendChild(t.createElement("div")), l = (Be.exec(o) || ["", ""])[1].toLowerCase(), c = Ge[l] || Ge._default, a.innerHTML = c[1] + o.replace(Ie, "<$1></$2>") + c[2], i = c[0]; i--;) a = a.lastChild;
                if (!ne.leadingWhitespace && He.test(o) && d.push(t.createTextNode(He.exec(o)[0])), !ne.tbody) for (o = "table" !== l || qe.test(o) ? "<table>" !== c[1] || qe.test(o) ? 0 : a: a.firstChild, i = o && o.childNodes.length; i--;) ie.nodeName(u = o.childNodes[i], "tbody") && !u.childNodes.length && o.removeChild(u);
                for (ie.merge(d, a.childNodes), a.textContent = ""; a.firstChild;) a.removeChild(a.firstChild);
                a = p.lastChild
            } else d.push(t.createTextNode(o));
            for (a && p.removeChild(a), ne.appendChecked || ie.grep(m(d, "input"), g), f = 0; o = d[f++];) if ((!r || -1 === ie.inArray(o, r)) && (s = ie.contains(o.ownerDocument, o), a = m(p.appendChild(o), "script"), s && $(a), n)) for (i = 0; o = a[i++];) We.test(o.type || "") && n.push(o);
            return a = null,
            p
        },
        cleanData: function(e, t) {
            for (var n, r, i, o, s = 0,
            a = ie.expando,
            l = ie.cache,
            u = ne.deleteExpando,
            c = ie.event.special; null != (n = e[s]); s++) if ((t || ie.acceptData(n)) && (i = n[a], o = i && l[i])) {
                if (o.events) for (r in o.events) c[r] ? ie.event.remove(n, r) : ie.removeEvent(n, r, o.handle);
                l[i] && (delete l[i], u ? delete n[a] : typeof n.removeAttribute !== we ? n.removeAttribute(a) : n[a] = null, X.push(i))
            }
        }
    }),
    ie.fn.extend({
        text: function(e) {
            return Se(this,
            function(e) {
                return void 0 === e ? ie.text(this) : this.empty().append((this[0] && this[0].ownerDocument || fe).createTextNode(e))
            },
            null, e, arguments.length)
        },
        append: function() {
            return this.domManip(arguments,
            function(e) {
                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                    var t = y(this, e);
                    t.appendChild(e)
                }
            })
        },
        prepend: function() {
            return this.domManip(arguments,
            function(e) {
                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                    var t = y(this, e);
                    t.insertBefore(e, t.firstChild)
                }
            })
        },
        before: function() {
            return this.domManip(arguments,
            function(e) {
                this.parentNode && this.parentNode.insertBefore(e, this)
            })
        },
        after: function() {
            return this.domManip(arguments,
            function(e) {
                this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
            })
        },
        remove: function(e, t) {
            for (var n, r = e ? ie.filter(e, this) : this, i = 0; null != (n = r[i]); i++) t || 1 !== n.nodeType || ie.cleanData(m(n)),
            n.parentNode && (t && ie.contains(n.ownerDocument, n) && $(m(n, "script")), n.parentNode.removeChild(n));
            return this
        },
        empty: function() {
            for (var e, t = 0; null != (e = this[t]); t++) {
                for (1 === e.nodeType && ie.cleanData(m(e, !1)); e.firstChild;) e.removeChild(e.firstChild);
                e.options && ie.nodeName(e, "select") && (e.options.length = 0)
            }
            return this
        },
        clone: function(e, t) {
            return e = null == e ? !1 : e,
            t = null == t ? e: t,
            this.map(function() {
                return ie.clone(this, e, t)
            })
        },
        html: function(e) {
            return Se(this,
            function(e) {
                var t = this[0] || {},
                n = 0,
                r = this.length;
                if (void 0 === e) return 1 === t.nodeType ? t.innerHTML.replace(Le, "") : void 0;
                if ("string" == typeof e && !Ve.test(e) && (ne.htmlSerialize || !Fe.test(e)) && (ne.leadingWhitespace || !He.test(e)) && !Ge[(Be.exec(e) || ["", ""])[1].toLowerCase()]) {
                    e = e.replace(Ie, "<$1></$2>");
                    try {
                        for (; r > n; n++) t = this[n] || {},
                        1 === t.nodeType && (ie.cleanData(m(t, !1)), t.innerHTML = e);
                        t = 0
                    } catch(i) {}
                }
                t && this.empty().append(e)
            },
            null, e, arguments.length)
        },
        replaceWith: function() {
            var e = arguments[0];
            return this.domManip(arguments,
            function(t) {
                e = this.parentNode,
                ie.cleanData(m(this)),
                e && e.replaceChild(t, this)
            }),
            e && (e.length || e.nodeType) ? this: this.remove()
        },
        detach: function(e) {
            return this.remove(e, !0)
        },
        domManip: function(e, t) {
            e = Y.apply([], e);
            var n, r, i, o, s, a, l = 0,
            u = this.length,
            c = this,
            h = u - 1,
            p = e[0],
            d = ie.isFunction(p);
            if (d || u > 1 && "string" == typeof p && !ne.checkClone && Qe.test(p)) return this.each(function(n) {
                var r = c.eq(n);
                d && (e[0] = p.call(this, n, r.html())),
                r.domManip(e, t)
            });
            if (u && (a = ie.buildFragment(e, this[0].ownerDocument, !1, this), n = a.firstChild, 1 === a.childNodes.length && (a = n), n)) {
                for (o = ie.map(m(a, "script"), j), i = o.length; u > l; l++) r = a,
                l !== h && (r = ie.clone(r, !0, !0), i && ie.merge(o, m(r, "script"))),
                t.call(this[l], r, l);
                if (i) for (s = o[o.length - 1].ownerDocument, ie.map(o, b), l = 0; i > l; l++) r = o[l],
                We.test(r.type || "") && !ie._data(r, "globalEval") && ie.contains(s, r) && (r.src ? ie._evalUrl && ie._evalUrl(r.src) : ie.globalEval((r.text || r.textContent || r.innerHTML || "").replace(Xe, "")));
                a = n = null
            }
            return this
        }
    }),
    ie.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    },
    function(e, t) {
        ie.fn[e] = function(e) {
            for (var n, r = 0,
            i = [], o = ie(e), s = o.length - 1; s >= r; r++) n = r === s ? this: this.clone(!0),
            ie(o[r])[t](n),
            J.apply(i, n.get());
            return this.pushStack(i)
        }
    });
    var Ke, Ze = {}; !
    function() {
        var e;
        ne.shrinkWrapBlocks = function() {
            if (null != e) return e;
            e = !1;
            var t, n, r;
            return n = fe.getElementsByTagName("body")[0],
            n && n.style ? (t = fe.createElement("div"), r = fe.createElement("div"), r.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", n.appendChild(r).appendChild(t), typeof t.style.zoom !== we && (t.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1", t.appendChild(fe.createElement("div")).style.width = "5px", e = 3 !== t.offsetWidth), n.removeChild(r), e) : void 0
        }
    } ();
    var et, tt, nt = /^margin/,
    rt = new RegExp("^(" + ke + ")(?!px)[a-z%]+$", "i"),
    it = /^(top|right|bottom|left)$/;
    e.getComputedStyle ? (et = function(e) {
        return e.ownerDocument.defaultView.getComputedStyle(e, null)
    },
    tt = function(e, t, n) {
        var r, i, o, s, a = e.style;
        return n = n || et(e),
        s = n ? n.getPropertyValue(t) || n[t] : void 0,
        n && ("" !== s || ie.contains(e.ownerDocument, e) || (s = ie.style(e, t)), rt.test(s) && nt.test(t) && (r = a.width, i = a.minWidth, o = a.maxWidth, a.minWidth = a.maxWidth = a.width = s, s = n.width, a.width = r, a.minWidth = i, a.maxWidth = o)),
        void 0 === s ? s: s + ""
    }) : fe.documentElement.currentStyle && (et = function(e) {
        return e.currentStyle
    },
    tt = function(e, t, n) {
        var r, i, o, s, a = e.style;
        return n = n || et(e),
        s = n ? n[t] : void 0,
        null == s && a && a[t] && (s = a[t]),
        rt.test(s) && !it.test(t) && (r = a.left, i = e.runtimeStyle, o = i && i.left, o && (i.left = e.currentStyle.left), a.left = "fontSize" === t ? "1em": s, s = a.pixelLeft + "px", a.left = r, o && (i.left = o)),
        void 0 === s ? s: s + "" || "auto"
    }),
    function() {
        function t() {
            var t, n, r, i;
            n = fe.getElementsByTagName("body")[0],
            n && n.style && (t = fe.createElement("div"), r = fe.createElement("div"), r.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", n.appendChild(r).appendChild(t), t.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute", o = s = !1, l = !0, e.getComputedStyle && (o = "1%" !== (e.getComputedStyle(t, null) || {}).top, s = "4px" === (e.getComputedStyle(t, null) || {
                width: "4px"
            }).width, i = t.appendChild(fe.createElement("div")), i.style.cssText = t.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", i.style.marginRight = i.style.width = "0", t.style.width = "1px", l = !parseFloat((e.getComputedStyle(i, null) || {}).marginRight)), t.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", i = t.getElementsByTagName("td"), i[0].style.cssText = "margin:0;border:0;padding:0;display:none", a = 0 === i[0].offsetHeight, a && (i[0].style.display = "", i[1].style.display = "none", a = 0 === i[0].offsetHeight), n.removeChild(r))
        }
        var n, r, i, o, s, a, l;
        n = fe.createElement("div"),
        n.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",
        i = n.getElementsByTagName("a")[0],
        r = i && i.style,
        r && (r.cssText = "float:left;opacity:.5", ne.opacity = "0.5" === r.opacity, ne.cssFloat = !!r.cssFloat, n.style.backgroundClip = "content-box", n.cloneNode(!0).style.backgroundClip = "", ne.clearCloneStyle = "content-box" === n.style.backgroundClip, ne.boxSizing = "" === r.boxSizing || "" === r.MozBoxSizing || "" === r.WebkitBoxSizing, ie.extend(ne, {
            reliableHiddenOffsets: function() {
                return null == a && t(),
                a
            },
            boxSizingReliable: function() {
                return null == s && t(),
                s
            },
            pixelPosition: function() {
                return null == o && t(),
                o
            },
            reliableMarginRight: function() {
                return null == l && t(),
                l
            }
        }))
    } (),
    ie.swap = function(e, t, n, r) {
        var i, o, s = {};
        for (o in t) s[o] = e.style[o],
        e.style[o] = t[o];
        i = n.apply(e, r || []);
        for (o in t) e.style[o] = s[o];
        return i
    };
    var ot = /alpha\([^)]*\)/i,
    st = /opacity\s*=\s*([^)]*)/,
    at = /^(none|table(?!-c[ea]).+)/,
    lt = new RegExp("^(" + ke + ")(.*)$", "i"),
    ut = new RegExp("^([+-])=(" + ke + ")", "i"),
    ct = {
        position: "absolute",
        visibility: "hidden",
        display: "block"
    },
    ht = {
        letterSpacing: "0",
        fontWeight: "400"
    },
    pt = ["Webkit", "O", "Moz", "ms"];
    ie.extend({
        cssHooks: {
            opacity: {
                get: function(e, t) {
                    if (t) {
                        var n = tt(e, "opacity");
                        return "" === n ? "1": n
                    }
                }
            }
        },
        cssNumber: {
            columnCount: !0,
            fillOpacity: !0,
            flexGrow: !0,
            flexShrink: !0,
            fontWeight: !0,
            lineHeight: !0,
            opacity: !0,
            order: !0,
            orphans: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0
        },
        cssProps: {
            "float": ne.cssFloat ? "cssFloat": "styleFloat"
        },
        style: function(e, t, n, r) {
            if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
                var i, o, s, a = ie.camelCase(t),
                l = e.style;
                if (t = ie.cssProps[a] || (ie.cssProps[a] = E(l, a)), s = ie.cssHooks[t] || ie.cssHooks[a], void 0 === n) return s && "get" in s && void 0 !== (i = s.get(e, !1, r)) ? i: l[t];
                if (o = typeof n, "string" === o && (i = ut.exec(n)) && (n = (i[1] + 1) * i[2] + parseFloat(ie.css(e, t)), o = "number"), null != n && n === n && ("number" !== o || ie.cssNumber[a] || (n += "px"), ne.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), !(s && "set" in s && void 0 === (n = s.set(e, n, r))))) try {
                    l[t] = n
                } catch(u) {}
            }
        },
        css: function(e, t, n, r) {
            var i, o, s, a = ie.camelCase(t);
            return t = ie.cssProps[a] || (ie.cssProps[a] = E(e.style, a)),
            s = ie.cssHooks[t] || ie.cssHooks[a],
            s && "get" in s && (o = s.get(e, !0, n)),
            void 0 === o && (o = tt(e, t, r)),
            "normal" === o && t in ht && (o = ht[t]),
            "" === n || n ? (i = parseFloat(o), n === !0 || ie.isNumeric(i) ? i || 0 : o) : o
        }
    }),
    ie.each(["height", "width"],
    function(e, t) {
        ie.cssHooks[t] = {
            get: function(e, n, r) {
                return n ? at.test(ie.css(e, "display")) && 0 === e.offsetWidth ? ie.swap(e, ct,
                function() {
                    return P(e, t, r)
                }) : P(e, t, r) : void 0
            },
            set: function(e, n, r) {
                var i = r && et(e);
                return S(e, n, r ? M(e, t, r, ne.boxSizing && "border-box" === ie.css(e, "boxSizing", !1, i), i) : 0)
            }
        }
    }),
    ne.opacity || (ie.cssHooks.opacity = {
        get: function(e, t) {
            return st.test((t && e.currentStyle ? e.currentStyle.filter: e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "": t ? "1": ""
        },
        set: function(e, t) {
            var n = e.style,
            r = e.currentStyle,
            i = ie.isNumeric(t) ? "alpha(opacity=" + 100 * t + ")": "",
            o = r && r.filter || n.filter || "";
            n.zoom = 1,
            (t >= 1 || "" === t) && "" === ie.trim(o.replace(ot, "")) && n.removeAttribute && (n.removeAttribute("filter"), "" === t || r && !r.filter) || (n.filter = ot.test(o) ? o.replace(ot, i) : o + " " + i)
        }
    }),
    ie.cssHooks.marginRight = k(ne.reliableMarginRight,
    function(e, t) {
        return t ? ie.swap(e, {
            display: "inline-block"
        },
        tt, [e, "marginRight"]) : void 0
    }),
    ie.each({
        margin: "",
        padding: "",
        border: "Width"
    },
    function(e, t) {
        ie.cssHooks[e + t] = {
            expand: function(n) {
                for (var r = 0,
                i = {},
                o = "string" == typeof n ? n.split(" ") : [n]; 4 > r; r++) i[e + Ee[r] + t] = o[r] || o[r - 2] || o[0];
                return i
            }
        },
        nt.test(e) || (ie.cssHooks[e + t].set = S)
    }),
    ie.fn.extend({
        css: function(e, t) {
            return Se(this,
            function(e, t, n) {
                var r, i, o = {},
                s = 0;
                if (ie.isArray(t)) {
                    for (r = et(e), i = t.length; i > s; s++) o[t[s]] = ie.css(e, t[s], !1, r);
                    return o
                }
                return void 0 !== n ? ie.style(e, t, n) : ie.css(e, t)
            },
            e, t, arguments.length > 1)
        },
        show: function() {
            return _(this, !0)
        },
        hide: function() {
            return _(this)
        },
        toggle: function(e) {
            return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() {
                _e(this) ? ie(this).show() : ie(this).hide()
            })
        }
    }),
    ie.Tween = A,
    A.prototype = {
        constructor: A,
        init: function(e, t, n, r, i, o) {
            this.elem = e,
            this.prop = n,
            this.easing = i || "swing",
            this.options = t,
            this.start = this.now = this.cur(),
            this.end = r,
            this.unit = o || (ie.cssNumber[n] ? "": "px")
        },
        cur: function() {
            var e = A.propHooks[this.prop];
            return e && e.get ? e.get(this) : A.propHooks._default.get(this)
        },
        run: function(e) {
            var t, n = A.propHooks[this.prop];
            return this.options.duration ? this.pos = t = ie.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e,
            this.now = (this.end - this.start) * t + this.start,
            this.options.step && this.options.step.call(this.elem, this.now, this),
            n && n.set ? n.set(this) : A.propHooks._default.set(this),
            this
        }
    },
    A.prototype.init.prototype = A.prototype,
    A.propHooks = {
        _default: {
            get: function(e) {
                var t;
                return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = ie.css(e.elem, e.prop, ""), t && "auto" !== t ? t: 0) : e.elem[e.prop]
            },
            set: function(e) {
                ie.fx.step[e.prop] ? ie.fx.step[e.prop](e) : e.elem.style && (null != e.elem.style[ie.cssProps[e.prop]] || ie.cssHooks[e.prop]) ? ie.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now
            }
        }
    },
    A.propHooks.scrollTop = A.propHooks.scrollLeft = {
        set: function(e) {
            e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
        }
    },
    ie.easing = {
        linear: function(e) {
            return e
        },
        swing: function(e) {
            return.5 - Math.cos(e * Math.PI) / 2
        }
    },
    ie.fx = A.prototype.init,
    ie.fx.step = {};
    var dt, ft, vt = /^(?:toggle|show|hide)$/,
    mt = new RegExp("^(?:([+-])=|)(" + ke + ")([a-z%]*)$", "i"),
    gt = /queueHooks$/,
    yt = [O],
    jt = {
        "*": [function(e, t) {
            var n = this.createTween(e, t),
            r = n.cur(),
            i = mt.exec(t),
            o = i && i[3] || (ie.cssNumber[e] ? "": "px"),
            s = (ie.cssNumber[e] || "px" !== o && +r) && mt.exec(ie.css(n.elem, e)),
            a = 1,
            l = 20;
            if (s && s[3] !== o) {
                o = o || s[3],
                i = i || [],
                s = +r || 1;
                do a = a || ".5",
                s /= a,
                ie.style(n.elem, e, s + o);
                while (a !== (a = n.cur() / r) && 1 !== a && --l)
            }
            return i && (s = n.start = +s || +r || 0, n.unit = o, n.end = i[1] ? s + (i[1] + 1) * i[2] : +i[2]),
            n
        }]
    };
    ie.Animation = ie.extend(F, {
        tweener: function(e, t) {
            ie.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" ");
            for (var n, r = 0,
            i = e.length; i > r; r++) n = e[r],
            jt[n] = jt[n] || [],
            jt[n].unshift(t)
        },
        prefilter: function(e, t) {
            t ? yt.unshift(e) : yt.push(e)
        }
    }),
    ie.speed = function(e, t, n) {
        var r = e && "object" == typeof e ? ie.extend({},
        e) : {
            complete: n || !n && t || ie.isFunction(e) && e,
            duration: e,
            easing: n && t || t && !ie.isFunction(t) && t
        };
        return r.duration = ie.fx.off ? 0 : "number" == typeof r.duration ? r.duration: r.duration in ie.fx.speeds ? ie.fx.speeds[r.duration] : ie.fx.speeds._default,
        null != r.queue && r.queue !== !0 || (r.queue = "fx"),
        r.old = r.complete,
        r.complete = function() {
            ie.isFunction(r.old) && r.old.call(this),
            r.queue && ie.dequeue(this, r.queue)
        },
        r
    },
    ie.fn.extend({
        fadeTo: function(e, t, n, r) {
            return this.filter(_e).css("opacity", 0).show().end().animate({
                opacity: t
            },
            e, n, r)
        },
        animate: function(e, t, n, r) {
            var i = ie.isEmptyObject(e),
            o = ie.speed(t, n, r),
            s = function() {
                var t = F(this, ie.extend({},
                e), o); (i || ie._data(this, "finish")) && t.stop(!0)
            };
            return s.finish = s,
            i || o.queue === !1 ? this.each(s) : this.queue(o.queue, s)
        },
        stop: function(e, t, n) {
            var r = function(e) {
                var t = e.stop;
                delete e.stop,
                t(n)
            };
            return "string" != typeof e && (n = t, t = e, e = void 0),
            t && e !== !1 && this.queue(e || "fx", []),
            this.each(function() {
                var t = !0,
                i = null != e && e + "queueHooks",
                o = ie.timers,
                s = ie._data(this);
                if (i) s[i] && s[i].stop && r(s[i]);
                else for (i in s) s[i] && s[i].stop && gt.test(i) && r(s[i]);
                for (i = o.length; i--;) o[i].elem !== this || null != e && o[i].queue !== e || (o[i].anim.stop(n), t = !1, o.splice(i, 1)); ! t && n || ie.dequeue(this, e)
            })
        },
        finish: function(e) {
            return e !== !1 && (e = e || "fx"),
            this.each(function() {
                var t, n = ie._data(this),
                r = n[e + "queue"],
                i = n[e + "queueHooks"],
                o = ie.timers,
                s = r ? r.length: 0;
                for (n.finish = !0, ie.queue(this, e, []), i && i.stop && i.stop.call(this, !0), t = o.length; t--;) o[t].elem === this && o[t].queue === e && (o[t].anim.stop(!0), o.splice(t, 1));
                for (t = 0; s > t; t++) r[t] && r[t].finish && r[t].finish.call(this);
                delete n.finish
            })
        }
    }),
    ie.each(["toggle", "show", "hide"],
    function(e, t) {
        var n = ie.fn[t];
        ie.fn[t] = function(e, r, i) {
            return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate(R(t, !0), e, r, i)
        }
    }),
    ie.each({
        slideDown: R("show"),
        slideUp: R("hide"),
        slideToggle: R("toggle"),
        fadeIn: {
            opacity: "show"
        },
        fadeOut: {
            opacity: "hide"
        },
        fadeToggle: {
            opacity: "toggle"
        }
    },
    function(e, t) {
        ie.fn[e] = function(e, n, r) {
            return this.animate(t, e, n, r)
        }
    }),
    ie.timers = [],
    ie.fx.tick = function() {
        var e, t = ie.timers,
        n = 0;
        for (dt = ie.now(); n < t.length; n++) e = t[n],
        e() || t[n] !== e || t.splice(n--, 1);
        t.length || ie.fx.stop(),
        dt = void 0
    },
    ie.fx.timer = function(e) {
        ie.timers.push(e),
        e() ? ie.fx.start() : ie.timers.pop()
    },
    ie.fx.interval = 13,
    ie.fx.start = function() {
        ft || (ft = setInterval(ie.fx.tick, ie.fx.interval))
    },
    ie.fx.stop = function() {
        clearInterval(ft),
        ft = null
    },
    ie.fx.speeds = {
        slow: 600,
        fast: 200,
        _default: 400
    },
    ie.fn.delay = function(e, t) {
        return e = ie.fx ? ie.fx.speeds[e] || e: e,
        t = t || "fx",
        this.queue(t,
        function(t, n) {
            var r = setTimeout(t, e);
            n.stop = function() {
                clearTimeout(r)
            }
        })
    },
    function() {
        var e, t, n, r, i;
        t = fe.createElement("div"),
        t.setAttribute("className", "t"),
        t.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",
        r = t.getElementsByTagName("a")[0],
        n = fe.createElement("select"),
        i = n.appendChild(fe.createElement("option")),
        e = t.getElementsByTagName("input")[0],
        r.style.cssText = "top:1px",
        ne.getSetAttribute = "t" !== t.className,
        ne.style = /top/.test(r.getAttribute("style")),
        ne.hrefNormalized = "/a" === r.getAttribute("href"),
        ne.checkOn = !!e.value,
        ne.optSelected = i.selected,
        ne.enctype = !!fe.createElement("form").enctype,
        n.disabled = !0,
        ne.optDisabled = !i.disabled,
        e = fe.createElement("input"),
        e.setAttribute("value", ""),
        ne.input = "" === e.getAttribute("value"),
        e.value = "t",
        e.setAttribute("type", "radio"),
        ne.radioValue = "t" === e.value
    } ();
    var bt = /\r/g;
    ie.fn.extend({
        val: function(e) {
            var t, n, r, i = this[0]; {
                if (arguments.length) return r = ie.isFunction(e),
                this.each(function(n) {
                    var i;
                    1 === this.nodeType && (i = r ? e.call(this, n, ie(this).val()) : e, null == i ? i = "": "number" == typeof i ? i += "": ie.isArray(i) && (i = ie.map(i,
                    function(e) {
                        return null == e ? "": e + ""
                    })), t = ie.valHooks[this.type] || ie.valHooks[this.nodeName.toLowerCase()], t && "set" in t && void 0 !== t.set(this, i, "value") || (this.value = i))
                });
                if (i) return t = ie.valHooks[i.type] || ie.valHooks[i.nodeName.toLowerCase()],
                t && "get" in t && void 0 !== (n = t.get(i, "value")) ? n: (n = i.value, "string" == typeof n ? n.replace(bt, "") : null == n ? "": n)
            }
        }
    }),
    ie.extend({
        valHooks: {
            option: {
                get: function(e) {
                    var t = ie.find.attr(e, "value");
                    return null != t ? t: ie.trim(ie.text(e))
                }
            },
            select: {
                get: function(e) {
                    for (var t, n, r = e.options,
                    i = e.selectedIndex,
                    o = "select-one" === e.type || 0 > i,
                    s = o ? null: [], a = o ? i + 1 : r.length, l = 0 > i ? a: o ? i: 0; a > l; l++) if (n = r[l], (n.selected || l === i) && (ne.optDisabled ? !n.disabled: null === n.getAttribute("disabled")) && (!n.parentNode.disabled || !ie.nodeName(n.parentNode, "optgroup"))) {
                        if (t = ie(n).val(), o) return t;
                        s.push(t)
                    }
                    return s
                },
                set: function(e, t) {
                    for (var n, r, i = e.options,
                    o = ie.makeArray(t), s = i.length; s--;) if (r = i[s], ie.inArray(ie.valHooks.option.get(r), o) >= 0) try {
                        r.selected = n = !0
                    } catch(a) {
                        r.scrollHeight
                    } else r.selected = !1;
                    return n || (e.selectedIndex = -1),
                    i
                }
            }
        }
    }),
    ie.each(["radio", "checkbox"],
    function() {
        ie.valHooks[this] = {
            set: function(e, t) {
                return ie.isArray(t) ? e.checked = ie.inArray(ie(e).val(), t) >= 0 : void 0
            }
        },
        ne.checkOn || (ie.valHooks[this].get = function(e) {
            return null === e.getAttribute("value") ? "on": e.value
        })
    });
    var $t, xt, wt = ie.expr.attrHandle,
    Ct = /^(?:checked|selected)$/i,
    Tt = ne.getSetAttribute,
    kt = ne.input;
    ie.fn.extend({
        attr: function(e, t) {
            return Se(this, ie.attr, e, t, arguments.length > 1)
        },
        removeAttr: function(e) {
            return this.each(function() {
                ie.removeAttr(this, e)
            })
        }
    }),
    ie.extend({
        attr: function(e, t, n) {
            var r, i, o = e.nodeType;
            if (e && 3 !== o && 8 !== o && 2 !== o) return typeof e.getAttribute === we ? ie.prop(e, t, n) : (1 === o && ie.isXMLDoc(e) || (t = t.toLowerCase(), r = ie.attrHooks[t] || (ie.expr.match.bool.test(t) ? xt: $t)), void 0 === n ? r && "get" in r && null !== (i = r.get(e, t)) ? i: (i = ie.find.attr(e, t), null == i ? void 0 : i) : null !== n ? r && "set" in r && void 0 !== (i = r.set(e, n, t)) ? i: (e.setAttribute(t, n + ""), n) : void ie.removeAttr(e, t))
        },
        removeAttr: function(e, t) {
            var n, r, i = 0,
            o = t && t.match(je);
            if (o && 1 === e.nodeType) for (; n = o[i++];) r = ie.propFix[n] || n,
            ie.expr.match.bool.test(n) ? kt && Tt || !Ct.test(n) ? e[r] = !1 : e[ie.camelCase("default-" + n)] = e[r] = !1 : ie.attr(e, n, ""),
            e.removeAttribute(Tt ? n: r)
        },
        attrHooks: {
            type: {
                set: function(e, t) {
                    if (!ne.radioValue && "radio" === t && ie.nodeName(e, "input")) {
                        var n = e.value;
                        return e.setAttribute("type", t),
                        n && (e.value = n),
                        t
                    }
                }
            }
        }
    }),
    xt = {
        set: function(e, t, n) {
            return t === !1 ? ie.removeAttr(e, n) : kt && Tt || !Ct.test(n) ? e.setAttribute(!Tt && ie.propFix[n] || n, n) : e[ie.camelCase("default-" + n)] = e[n] = !0,
            n
        }
    },
    ie.each(ie.expr.match.bool.source.match(/\w+/g),
    function(e, t) {
        var n = wt[t] || ie.find.attr;
        wt[t] = kt && Tt || !Ct.test(t) ?
        function(e, t, r) {
            var i, o;
            return r || (o = wt[t], wt[t] = i, i = null != n(e, t, r) ? t.toLowerCase() : null, wt[t] = o),
            i
        }: function(e, t, n) {
            return n ? void 0 : e[ie.camelCase("default-" + t)] ? t.toLowerCase() : null
        }
    }),
    kt && Tt || (ie.attrHooks.value = {
        set: function(e, t, n) {
            return ie.nodeName(e, "input") ? void(e.defaultValue = t) : $t && $t.set(e, t, n)
        }
    }),
    Tt || ($t = {
        set: function(e, t, n) {
            var r = e.getAttributeNode(n);
            return r || e.setAttributeNode(r = e.ownerDocument.createAttribute(n)),
            r.value = t += "",
            "value" === n || t === e.getAttribute(n) ? t: void 0
        }
    },
    wt.id = wt.name = wt.coords = function(e, t, n) {
        var r;
        return n ? void 0 : (r = e.getAttributeNode(t)) && "" !== r.value ? r.value: null
    },
    ie.valHooks.button = {
        get: function(e, t) {
            var n = e.getAttributeNode(t);
            return n && n.specified ? n.value: void 0
        },
        set: $t.set
    },
    ie.attrHooks.contenteditable = {
        set: function(e, t, n) {
            $t.set(e, "" === t ? !1 : t, n)
        }
    },
    ie.each(["width", "height"],
    function(e, t) {
        ie.attrHooks[t] = {
            set: function(e, n) {
                return "" === n ? (e.setAttribute(t, "auto"), n) : void 0
            }
        }
    })),
    ne.style || (ie.attrHooks.style = {
        get: function(e) {
            return e.style.cssText || void 0
        },
        set: function(e, t) {
            return e.style.cssText = t + ""
        }
    });
    var Et = /^(?:input|select|textarea|button|object)$/i,
    _t = /^(?:a|area)$/i;
    ie.fn.extend({
        prop: function(e, t) {
            return Se(this, ie.prop, e, t, arguments.length > 1)
        },
        removeProp: function(e) {
            return e = ie.propFix[e] || e,
            this.each(function() {
                try {
                    this[e] = void 0,
                    delete this[e]
                } catch(t) {}
            })
        }
    }),
    ie.extend({
        propFix: {
            "for": "htmlFor",
            "class": "className"
        },
        prop: function(e, t, n) {
            var r, i, o, s = e.nodeType;
            if (e && 3 !== s && 8 !== s && 2 !== s) return o = 1 !== s || !ie.isXMLDoc(e),
            o && (t = ie.propFix[t] || t, i = ie.propHooks[t]),
            void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r: e[t] = n: i && "get" in i && null !== (r = i.get(e, t)) ? r: e[t]
        },
        propHooks: {
            tabIndex: {
                get: function(e) {
                    var t = ie.find.attr(e, "tabindex");
                    return t ? parseInt(t, 10) : Et.test(e.nodeName) || _t.test(e.nodeName) && e.href ? 0 : -1
                }
            }
        }
    }),
    ne.hrefNormalized || ie.each(["href", "src"],
    function(e, t) {
        ie.propHooks[t] = {
            get: function(e) {
                return e.getAttribute(t, 4)
            }
        }
    }),
    ne.optSelected || (ie.propHooks.selected = {
        get: function(e) {
            var t = e.parentNode;
            return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex),
            null
        }
    }),
    ie.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"],
    function() {
        ie.propFix[this.toLowerCase()] = this
    }),
    ne.enctype || (ie.propFix.enctype = "encoding");
    var St = /[\t\r\n\f]/g;
    ie.fn.extend({
        addClass: function(e) {
            var t, n, r, i, o, s, a = 0,
            l = this.length,
            u = "string" == typeof e && e;
            if (ie.isFunction(e)) return this.each(function(t) {
                ie(this).addClass(e.call(this, t, this.className))
            });
            if (u) for (t = (e || "").match(je) || []; l > a; a++) if (n = this[a], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(St, " ") : " ")) {
                for (o = 0; i = t[o++];) r.indexOf(" " + i + " ") < 0 && (r += i + " ");
                s = ie.trim(r),
                n.className !== s && (n.className = s)
            }
            return this
        },
        removeClass: function(e) {
            var t, n, r, i, o, s, a = 0,
            l = this.length,
            u = 0 === arguments.length || "string" == typeof e && e;
            if (ie.isFunction(e)) return this.each(function(t) {
                ie(this).removeClass(e.call(this, t, this.className))
            });
            if (u) for (t = (e || "").match(je) || []; l > a; a++) if (n = this[a], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(St, " ") : "")) {
                for (o = 0; i = t[o++];) for (; r.indexOf(" " + i + " ") >= 0;) r = r.replace(" " + i + " ", " ");
                s = e ? ie.trim(r) : "",
                n.className !== s && (n.className = s)
            }
            return this
        },
        toggleClass: function(e, t) {
            var n = typeof e;
            return "boolean" == typeof t && "string" === n ? t ? this.addClass(e) : this.removeClass(e) : ie.isFunction(e) ? this.each(function(n) {
                ie(this).toggleClass(e.call(this, n, this.className, t), t)
            }) : this.each(function() {
                if ("string" === n) for (var t, r = 0,
                i = ie(this), o = e.match(je) || []; t = o[r++];) i.hasClass(t) ? i.removeClass(t) : i.addClass(t);
                else n !== we && "boolean" !== n || (this.className && ie._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "": ie._data(this, "__className__") || "")
            })
        },
        hasClass: function(e) {
            for (var t = " " + e + " ",
            n = 0,
            r = this.length; r > n; n++) if (1 === this[n].nodeType && (" " + this[n].className + " ").replace(St, " ").indexOf(t) >= 0) return ! 0;
            return ! 1
        }
    }),
    ie.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),
    function(e, t) {
        ie.fn[t] = function(e, n) {
            return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
        }
    }),
    ie.fn.extend({
        hover: function(e, t) {
            return this.mouseenter(e).mouseleave(t || e)
        },
        bind: function(e, t, n) {
            return this.on(e, null, t, n)
        },
        unbind: function(e, t) {
            return this.off(e, null, t)
        },
        delegate: function(e, t, n, r) {
            return this.on(t, e, n, r)
        },
        undelegate: function(e, t, n) {
            return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
        }
    });
    var Mt = ie.now(),
    Pt = /\?/,
    At = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
    ie.parseJSON = function(t) {
        if (e.JSON && e.JSON.parse) return e.JSON.parse(t + "");
        var n, r = null,
        i = ie.trim(t + "");
        return i && !ie.trim(i.replace(At,
        function(e, t, i, o) {
            return n && t && (r = 0),
            0 === r ? e: (n = i || t, r += !o - !i, "")
        })) ? Function("return " + i)() : ie.error("Invalid JSON: " + t)
    },
    ie.parseXML = function(t) {
        var n, r;
        if (!t || "string" != typeof t) return null;
        try {
            e.DOMParser ? (r = new DOMParser, n = r.parseFromString(t, "text/xml")) : (n = new ActiveXObject("Microsoft.XMLDOM"), n.async = "false", n.loadXML(t))
        } catch(i) {
            n = void 0
        }
        return n && n.documentElement && !n.getElementsByTagName("parsererror").length || ie.error("Invalid XML: " + t),
        n
    };
    var Nt, Rt, Dt = /#.*$/,
    Ot = /([?&])_=[^&]*/,
    Lt = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
    Ft = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
    Ht = /^(?:GET|HEAD)$/,
    It = /^\/\//,
    Bt = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
    qt = {},
    Ut = {},
    Vt = "*/".concat("*");
    try {
        Rt = location.href
    } catch(Qt) {
        Rt = fe.createElement("a"),
        Rt.href = "",
        Rt = Rt.href
    }
    Nt = Bt.exec(Rt.toLowerCase()) || [],
    ie.extend({
        active: 0,
        lastModified: {},
        etag: {},
        ajaxSettings: {
            url: Rt,
            type: "GET",
            isLocal: Ft.test(Nt[1]),
            global: !0,
            processData: !0,
            async: !0,
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            accepts: {
                "*": Vt,
                text: "text/plain",
                html: "text/html",
                xml: "application/xml, text/xml",
                json: "application/json, text/javascript"
            },
            contents: {
                xml: /xml/,
                html: /html/,
                json: /json/
            },
            responseFields: {
                xml: "responseXML",
                text: "responseText",
                json: "responseJSON"
            },
            converters: {
                "* text": String,
                "text html": !0,
                "text json": ie.parseJSON,
                "text xml": ie.parseXML
            },
            flatOptions: {
                url: !0,
                context: !0
            }
        },
        ajaxSetup: function(e, t) {
            return t ? B(B(e, ie.ajaxSettings), t) : B(ie.ajaxSettings, e)
        },
        ajaxPrefilter: H(qt),
        ajaxTransport: H(Ut),
        ajax: function(e, t) {
            function n(e, t, n, r) {
                var i, c, g, y, b, x = t;
                2 !== j && (j = 2, a && clearTimeout(a), u = void 0, s = r || "", $.readyState = e > 0 ? 4 : 0, i = e >= 200 && 300 > e || 304 === e, n && (y = q(h, $, n)), y = U(h, y, $, i), i ? (h.ifModified && (b = $.getResponseHeader("Last-Modified"), b && (ie.lastModified[o] = b), b = $.getResponseHeader("etag"), b && (ie.etag[o] = b)), 204 === e || "HEAD" === h.type ? x = "nocontent": 304 === e ? x = "notmodified": (x = y.state, c = y.data, g = y.error, i = !g)) : (g = x, !e && x || (x = "error", 0 > e && (e = 0))), $.status = e, $.statusText = (t || x) + "", i ? f.resolveWith(p, [c, x, $]) : f.rejectWith(p, [$, x, g]), $.statusCode(m), m = void 0, l && d.trigger(i ? "ajaxSuccess": "ajaxError", [$, h, i ? c: g]), v.fireWith(p, [$, x]), l && (d.trigger("ajaxComplete", [$, h]), --ie.active || ie.event.trigger("ajaxStop")))
            }
            "object" == typeof e && (t = e, e = void 0),
            t = t || {};
            var r, i, o, s, a, l, u, c, h = ie.ajaxSetup({},
            t),
            p = h.context || h,
            d = h.context && (p.nodeType || p.jquery) ? ie(p) : ie.event,
            f = ie.Deferred(),
            v = ie.Callbacks("once memory"),
            m = h.statusCode || {},
            g = {},
            y = {},
            j = 0,
            b = "canceled",
            $ = {
                readyState: 0,
                getResponseHeader: function(e) {
                    var t;
                    if (2 === j) {
                        if (!c) for (c = {}; t = Lt.exec(s);) c[t[1].toLowerCase()] = t[2];
                        t = c[e.toLowerCase()]
                    }
                    return null == t ? null: t
                },
                getAllResponseHeaders: function() {
                    return 2 === j ? s: null
                },
                setRequestHeader: function(e, t) {
                    var n = e.toLowerCase();
                    return j || (e = y[n] = y[n] || e, g[e] = t),
                    this
                },
                overrideMimeType: function(e) {
                    return j || (h.mimeType = e),
                    this
                },
                statusCode: function(e) {
                    var t;
                    if (e) if (2 > j) for (t in e) m[t] = [m[t], e[t]];
                    else $.always(e[$.status]);
                    return this
                },
                abort: function(e) {
                    var t = e || b;
                    return u && u.abort(t),
                    n(0, t),
                    this
                }
            };
            if (f.promise($).complete = v.add, $.success = $.done, $.error = $.fail, h.url = ((e || h.url || Rt) + "").replace(Dt, "").replace(It, Nt[1] + "//"), h.type = t.method || t.type || h.method || h.type, h.dataTypes = ie.trim(h.dataType || "*").toLowerCase().match(je) || [""], null == h.crossDomain && (r = Bt.exec(h.url.toLowerCase()), h.crossDomain = !(!r || r[1] === Nt[1] && r[2] === Nt[2] && (r[3] || ("http:" === r[1] ? "80": "443")) === (Nt[3] || ("http:" === Nt[1] ? "80": "443")))), h.data && h.processData && "string" != typeof h.data && (h.data = ie.param(h.data, h.traditional)), I(qt, h, t, $), 2 === j) return $;
            l = h.global,
            l && 0 === ie.active++&&ie.event.trigger("ajaxStart"),
            h.type = h.type.toUpperCase(),
            h.hasContent = !Ht.test(h.type),
            o = h.url,
            h.hasContent || (h.data && (o = h.url += (Pt.test(o) ? "&": "?") + h.data, delete h.data), h.cache === !1 && (h.url = Ot.test(o) ? o.replace(Ot, "$1_=" + Mt++) : o + (Pt.test(o) ? "&": "?") + "_=" + Mt++)),
            h.ifModified && (ie.lastModified[o] && $.setRequestHeader("If-Modified-Since", ie.lastModified[o]), ie.etag[o] && $.setRequestHeader("If-None-Match", ie.etag[o])),
            (h.data && h.hasContent && h.contentType !== !1 || t.contentType) && $.setRequestHeader("Content-Type", h.contentType),
            $.setRequestHeader("Accept", h.dataTypes[0] && h.accepts[h.dataTypes[0]] ? h.accepts[h.dataTypes[0]] + ("*" !== h.dataTypes[0] ? ", " + Vt + "; q=0.01": "") : h.accepts["*"]);
            for (i in h.headers) $.setRequestHeader(i, h.headers[i]);
            if (h.beforeSend && (h.beforeSend.call(p, $, h) === !1 || 2 === j)) return $.abort();
            b = "abort";
            for (i in {
                success: 1,
                error: 1,
                complete: 1
            }) $[i](h[i]);
            if (u = I(Ut, h, t, $)) {
                $.readyState = 1,
                l && d.trigger("ajaxSend", [$, h]),
                h.async && h.timeout > 0 && (a = setTimeout(function() {
                    $.abort("timeout")
                },
                h.timeout));
                try {
                    j = 1,
                    u.send(g, n)
                } catch(x) {
                    if (! (2 > j)) throw x;
                    n( - 1, x)
                }
            } else n( - 1, "No Transport");
            return $
        },
        getJSON: function(e, t, n) {
            return ie.get(e, t, n, "json")
        },
        getScript: function(e, t) {
            return ie.get(e, void 0, t, "script")
        }
    }),
    ie.each(["get", "post"],
    function(e, t) {
        ie[t] = function(e, n, r, i) {
            return ie.isFunction(n) && (i = i || r, r = n, n = void 0),
            ie.ajax({
                url: e,
                type: t,
                dataType: i,
                data: n,
                success: r
            })
        }
    }),
    ie.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"],
    function(e, t) {
        ie.fn[t] = function(e) {
            return this.on(t, e)
        }
    }),
    ie._evalUrl = function(e) {
        return ie.ajax({
            url: e,
            type: "GET",
            dataType: "script",
            async: !1,
            global: !1,
            "throws": !0
        })
    },
    ie.fn.extend({
        wrapAll: function(e) {
            if (ie.isFunction(e)) return this.each(function(t) {
                ie(this).wrapAll(e.call(this, t))
            });
            if (this[0]) {
                var t = ie(e, this[0].ownerDocument).eq(0).clone(!0);
                this[0].parentNode && t.insertBefore(this[0]),
                t.map(function() {
                    for (var e = this; e.firstChild && 1 === e.firstChild.nodeType;) e = e.firstChild;
                    return e
                }).append(this)
            }
            return this
        },
        wrapInner: function(e) {
            return ie.isFunction(e) ? this.each(function(t) {
                ie(this).wrapInner(e.call(this, t))
            }) : this.each(function() {
                var t = ie(this),
                n = t.contents();
                n.length ? n.wrapAll(e) : t.append(e)
            })
        },
        wrap: function(e) {
            var t = ie.isFunction(e);
            return this.each(function(n) {
                ie(this).wrapAll(t ? e.call(this, n) : e)
            })
        },
        unwrap: function() {
            return this.parent().each(function() {
                ie.nodeName(this, "body") || ie(this).replaceWith(this.childNodes)
            }).end()
        }
    }),
    ie.expr.filters.hidden = function(e) {
        return e.offsetWidth <= 0 && e.offsetHeight <= 0 || !ne.reliableHiddenOffsets() && "none" === (e.style && e.style.display || ie.css(e, "display"))
    },
    ie.expr.filters.visible = function(e) {
        return ! ie.expr.filters.hidden(e)
    };
    var Wt = /%20/g,
    zt = /\[\]$/,
    Xt = /\r?\n/g,
    Gt = /^(?:submit|button|image|reset|file)$/i,
    Yt = /^(?:input|select|textarea|keygen)/i;
    ie.param = function(e, t) {
        var n, r = [],
        i = function(e, t) {
            t = ie.isFunction(t) ? t() : null == t ? "": t,
            r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
        };
        if (void 0 === t && (t = ie.ajaxSettings && ie.ajaxSettings.traditional), ie.isArray(e) || e.jquery && !ie.isPlainObject(e)) ie.each(e,
        function() {
            i(this.name, this.value)
        });
        else for (n in e) V(n, e[n], t, i);
        return r.join("&").replace(Wt, "+")
    },
    ie.fn.extend({
        serialize: function() {
            return ie.param(this.serializeArray())
        },
        serializeArray: function() {
            return this.map(function() {
                var e = ie.prop(this, "elements");
                return e ? ie.makeArray(e) : this
            }).filter(function() {
                var e = this.type;
                return this.name && !ie(this).is(":disabled") && Yt.test(this.nodeName) && !Gt.test(e) && (this.checked || !Me.test(e))
            }).map(function(e, t) {
                var n = ie(this).val();
                return null == n ? null: ie.isArray(n) ? ie.map(n,
                function(e) {
                    return {
                        name: t.name,
                        value: e.replace(Xt, "\r\n")
                    }
                }) : {
                    name: t.name,
                    value: n.replace(Xt, "\r\n")
                }
            }).get()
        }
    }),
    ie.ajaxSettings.xhr = void 0 !== e.ActiveXObject ?
    function() {
        return ! this.isLocal && /^(get|post|head|put|delete|options)$/i.test(this.type) && Q() || W()
    }: Q;
    var Jt = 0,
    Kt = {},
    Zt = ie.ajaxSettings.xhr();
    e.ActiveXObject && ie(e).on("unload",
    function() {
        for (var e in Kt) Kt[e](void 0, !0)
    }),
    ne.cors = !!Zt && "withCredentials" in Zt,
    Zt = ne.ajax = !!Zt,
    Zt && ie.ajaxTransport(function(e) {
        if (!e.crossDomain || ne.cors) {
            var t;
            return {
                send: function(n, r) {
                    var i, o = e.xhr(),
                    s = ++Jt;
                    if (o.open(e.type, e.url, e.async, e.username, e.password), e.xhrFields) for (i in e.xhrFields) o[i] = e.xhrFields[i];
                    e.mimeType && o.overrideMimeType && o.overrideMimeType(e.mimeType),
                    e.crossDomain || n["X-Requested-With"] || (n["X-Requested-With"] = "XMLHttpRequest");
                    for (i in n) void 0 !== n[i] && o.setRequestHeader(i, n[i] + "");
                    o.send(e.hasContent && e.data || null),
                    t = function(n, i) {
                        var a, l, u;
                        if (t && (i || 4 === o.readyState)) if (delete Kt[s], t = void 0, o.onreadystatechange = ie.noop, i) 4 !== o.readyState && o.abort();
                        else {
                            u = {},
                            a = o.status,
                            "string" == typeof o.responseText && (u.text = o.responseText);
                            try {
                                l = o.statusText
                            } catch(c) {
                                l = ""
                            }
                            a || !e.isLocal || e.crossDomain ? 1223 === a && (a = 204) : a = u.text ? 200 : 404
                        }
                        u && r(a, l, u, o.getAllResponseHeaders())
                    },
                    e.async ? 4 === o.readyState ? setTimeout(t) : o.onreadystatechange = Kt[s] = t: t()
                },
                abort: function() {
                    t && t(void 0, !0)
                }
            }
        }
    }),
    ie.ajaxSetup({
        accepts: {
            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
        },
        contents: {
            script: /(?:java|ecma)script/
        },
        converters: {
            "text script": function(e) {
                return ie.globalEval(e),
                e
            }
        }
    }),
    ie.ajaxPrefilter("script",
    function(e) {
        void 0 === e.cache && (e.cache = !1),
        e.crossDomain && (e.type = "GET", e.global = !1)
    }),
    ie.ajaxTransport("script",
    function(e) {
        if (e.crossDomain) {
            var t, n = fe.head || ie("head")[0] || fe.documentElement;
            return {
                send: function(r, i) {
                    t = fe.createElement("script"),
                    t.async = !0,
                    e.scriptCharset && (t.charset = e.scriptCharset),
                    t.src = e.url,
                    t.onload = t.onreadystatechange = function(e, n) { (n || !t.readyState || /loaded|complete/.test(t.readyState)) && (t.onload = t.onreadystatechange = null, t.parentNode && t.parentNode.removeChild(t), t = null, n || i(200, "success"))
                    },
                    n.insertBefore(t, n.firstChild)
                },
                abort: function() {
                    t && t.onload(void 0, !0)
                }
            }
        }
    });
    var en = [],
    tn = /(=)\?(?=&|$)|\?\?/;
    ie.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function() {
            var e = en.pop() || ie.expando + "_" + Mt++;
            return this[e] = !0,
            e
        }
    }),
    ie.ajaxPrefilter("json jsonp",
    function(t, n, r) {
        var i, o, s, a = t.jsonp !== !1 && (tn.test(t.url) ? "url": "string" == typeof t.data && !(t.contentType || "").indexOf("application/x-www-form-urlencoded") && tn.test(t.data) && "data");
        return a || "jsonp" === t.dataTypes[0] ? (i = t.jsonpCallback = ie.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback, a ? t[a] = t[a].replace(tn, "$1" + i) : t.jsonp !== !1 && (t.url += (Pt.test(t.url) ? "&": "?") + t.jsonp + "=" + i), t.converters["script json"] = function() {
            return s || ie.error(i + " was not called"),
            s[0]
        },
        t.dataTypes[0] = "json", o = e[i], e[i] = function() {
            s = arguments
        },
        r.always(function() {
            e[i] = o,
            t[i] && (t.jsonpCallback = n.jsonpCallback, en.push(i)),
            s && ie.isFunction(o) && o(s[0]),
            s = o = void 0
        }), "script") : void 0
    }),
    ie.parseHTML = function(e, t, n) {
        if (!e || "string" != typeof e) return null;
        "boolean" == typeof t && (n = t, t = !1),
        t = t || fe;
        var r = he.exec(e),
        i = !n && [];
        return r ? [t.createElement(r[1])] : (r = ie.buildFragment([e], t, i), i && i.length && ie(i).remove(), ie.merge([], r.childNodes))
    };
    var nn = ie.fn.load;
    ie.fn.load = function(e, t, n) {
        if ("string" != typeof e && nn) return nn.apply(this, arguments);
        var r, i, o, s = this,
        a = e.indexOf(" ");
        return a >= 0 && (r = ie.trim(e.slice(a, e.length)), e = e.slice(0, a)),
        ie.isFunction(t) ? (n = t, t = void 0) : t && "object" == typeof t && (o = "POST"),
        s.length > 0 && ie.ajax({
            url: e,
            type: o,
            dataType: "html",
            data: t
        }).done(function(e) {
            i = arguments,
            s.html(r ? ie("<div>").append(ie.parseHTML(e)).find(r) : e)
        }).complete(n &&
        function(e, t) {
            s.each(n, i || [e.responseText, t, e])
        }),
        this
    },
    ie.expr.filters.animated = function(e) {
        return ie.grep(ie.timers,
        function(t) {
            return e === t.elem
        }).length
    };
    var rn = e.document.documentElement;
    ie.offset = {
        setOffset: function(e, t, n) {
            var r, i, o, s, a, l, u, c = ie.css(e, "position"),
            h = ie(e),
            p = {};
            "static" === c && (e.style.position = "relative"),
            a = h.offset(),
            o = ie.css(e, "top"),
            l = ie.css(e, "left"),
            u = ("absolute" === c || "fixed" === c) && ie.inArray("auto", [o, l]) > -1,
            u ? (r = h.position(), s = r.top, i = r.left) : (s = parseFloat(o) || 0, i = parseFloat(l) || 0),
            ie.isFunction(t) && (t = t.call(e, n, a)),
            null != t.top && (p.top = t.top - a.top + s),
            null != t.left && (p.left = t.left - a.left + i),
            "using" in t ? t.using.call(e, p) : h.css(p)
        }
    },
    ie.fn.extend({
        offset: function(e) {
            if (arguments.length) return void 0 === e ? this: this.each(function(t) {
                ie.offset.setOffset(this, e, t)
            });
            var t, n, r = {
                top: 0,
                left: 0
            },
            i = this[0],
            o = i && i.ownerDocument;
            if (o) return t = o.documentElement,
            ie.contains(t, i) ? (typeof i.getBoundingClientRect !== we && (r = i.getBoundingClientRect()), n = z(o), {
                top: r.top + (n.pageYOffset || t.scrollTop) - (t.clientTop || 0),
                left: r.left + (n.pageXOffset || t.scrollLeft) - (t.clientLeft || 0)
            }) : r
        },
        position: function() {
            if (this[0]) {
                var e, t, n = {
                    top: 0,
                    left: 0
                },
                r = this[0];
                return "fixed" === ie.css(r, "position") ? t = r.getBoundingClientRect() : (e = this.offsetParent(), t = this.offset(), ie.nodeName(e[0], "html") || (n = e.offset()), n.top += ie.css(e[0], "borderTopWidth", !0), n.left += ie.css(e[0], "borderLeftWidth", !0)),
                {
                    top: t.top - n.top - ie.css(r, "marginTop", !0),
                    left: t.left - n.left - ie.css(r, "marginLeft", !0)
                }
            }
        },
        offsetParent: function() {
            return this.map(function() {
                for (var e = this.offsetParent || rn; e && !ie.nodeName(e, "html") && "static" === ie.css(e, "position");) e = e.offsetParent;
                return e || rn
            })
        }
    }),
    ie.each({
        scrollLeft: "pageXOffset",
        scrollTop: "pageYOffset"
    },
    function(e, t) {
        var n = /Y/.test(t);
        ie.fn[e] = function(r) {
            return Se(this,
            function(e, r, i) {
                var o = z(e);
                return void 0 === i ? o ? t in o ? o[t] : o.document.documentElement[r] : e[r] : void(o ? o.scrollTo(n ? ie(o).scrollLeft() : i, n ? i: ie(o).scrollTop()) : e[r] = i)
            },
            e, r, arguments.length, null)
        }
    }),
    ie.each(["top", "left"],
    function(e, t) {
        ie.cssHooks[t] = k(ne.pixelPosition,
        function(e, n) {
            return n ? (n = tt(e, t), rt.test(n) ? ie(e).position()[t] + "px": n) : void 0
        })
    }),
    ie.each({
        Height: "height",
        Width: "width"
    },
    function(e, t) {
        ie.each({
            padding: "inner" + e,
            content: t,
            "": "outer" + e
        },
        function(n, r) {
            ie.fn[r] = function(r, i) {
                var o = arguments.length && (n || "boolean" != typeof r),
                s = n || (r === !0 || i === !0 ? "margin": "border");
                return Se(this,
                function(t, n, r) {
                    var i;
                    return ie.isWindow(t) ? t.document.documentElement["client" + e] : 9 === t.nodeType ? (i = t.documentElement, Math.max(t.body["scroll" + e], i["scroll" + e], t.body["offset" + e], i["offset" + e], i["client" + e])) : void 0 === r ? ie.css(t, n, s) : ie.style(t, n, r, s)
                },
                t, o ? r: void 0, o, null)
            }
        })
    }),
    ie.fn.size = function() {
        return this.length
    },
    ie.fn.andSelf = ie.fn.addBack,
    "function" == typeof define && define.amd && define("jquery", [],
    function() {
        return ie
    });
    var on = e.jQuery,
    sn = e.$;
    return ie.noConflict = function(t) {
        return e.$ === ie && (e.$ = sn),
        t && e.jQuery === ie && (e.jQuery = on),
        ie
    },
    typeof t === we && (e.jQuery = e.$ = ie),
    ie
}),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof exports ? module.exports = e: e(jQuery)
} (function(e) {
    function t(t) {
        var s = t || window.event,
        a = l.call(arguments, 1),
        u = 0,
        h = 0,
        p = 0,
        d = 0,
        f = 0,
        v = 0;
        if (t = e.event.fix(s), t.type = "mousewheel", "detail" in s && (p = -1 * s.detail), "wheelDelta" in s && (p = s.wheelDelta), "wheelDeltaY" in s && (p = s.wheelDeltaY), "wheelDeltaX" in s && (h = -1 * s.wheelDeltaX), "axis" in s && s.axis === s.HORIZONTAL_AXIS && (h = -1 * p, p = 0), u = 0 === p ? h: p, "deltaY" in s && (p = -1 * s.deltaY, u = p), "deltaX" in s && (h = s.deltaX, 0 === p && (u = -1 * h)), 0 !== p || 0 !== h) {
            if (1 === s.deltaMode) {
                var m = e.data(this, "mousewheel-line-height");
                u *= m,
                p *= m,
                h *= m
            } else if (2 === s.deltaMode) {
                var g = e.data(this, "mousewheel-page-height");
                u *= g,
                p *= g,
                h *= g
            }
            if (d = Math.max(Math.abs(p), Math.abs(h)), (!o || o > d) && (o = d, r(s, d) && (o /= 40)), r(s, d) && (u /= 40, h /= 40, p /= 40), u = Math[u >= 1 ? "floor": "ceil"](u / o), h = Math[h >= 1 ? "floor": "ceil"](h / o), p = Math[p >= 1 ? "floor": "ceil"](p / o), c.settings.normalizeOffset && this.getBoundingClientRect) {
                var y = this.getBoundingClientRect();
                f = t.clientX - y.left,
                v = t.clientY - y.top
            }
            return t.deltaX = h,
            t.deltaY = p,
            t.deltaFactor = o,
            t.offsetX = f,
            t.offsetY = v,
            t.deltaMode = 0,
            a.unshift(t, u, h, p),
            i && clearTimeout(i),
            i = setTimeout(n, 200),
            (e.event.dispatch || e.event.handle).apply(this, a)
        }
    }
    function n() {
        o = null
    }
    function r(e, t) {
        return c.settings.adjustOldDeltas && "mousewheel" === e.type && t % 120 === 0
    }
    var i, o, s = ["wheel", "mousewheel", "DOMMouseScroll", "MozMousePixelScroll"],
    a = "onwheel" in document || document.documentMode >= 9 ? ["wheel"] : ["mousewheel", "DomMouseScroll", "MozMousePixelScroll"],
    l = Array.prototype.slice;
    if (e.event.fixHooks) for (var u = s.length; u;) e.event.fixHooks[s[--u]] = e.event.mouseHooks;
    var c = e.event.special.mousewheel = {
        version: "3.1.11",
        setup: function() {
            if (this.addEventListener) for (var n = a.length; n;) this.addEventListener(a[--n], t, !1);
            else this.onmousewheel = t;
            e.data(this, "mousewheel-line-height", c.getLineHeight(this)),
            e.data(this, "mousewheel-page-height", c.getPageHeight(this))
        },
        teardown: function() {
            if (this.removeEventListener) for (var n = a.length; n;) this.removeEventListener(a[--n], t, !1);
            else this.onmousewheel = null;
            e.removeData(this, "mousewheel-line-height"),
            e.removeData(this, "mousewheel-page-height")
        },
        getLineHeight: function(t) {
            var n = e(t)["offsetParent" in e.fn ? "offsetParent": "parent"]();
            return n.length || (n = e("body")),
            parseInt(n.css("fontSize"), 10)
        },
        getPageHeight: function(t) {
            return e(t).height()
        },
        settings: {
            adjustOldDeltas: !0,
            normalizeOffset: !0
        }
    };
    e.fn.extend({
        mousewheel: function(e) {
            return e ? this.bind("mousewheel", e) : this.trigger("mousewheel")
        },
        unmousewheel: function(e) {
            return this.unbind("mousewheel", e)
        }
    })
}),
function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : e(jQuery)
} (function(e) {
    var t = [],
    n = e(document),
    r = navigator.userAgent.toLowerCase(),
    i = e(window),
    o = [],
    s = {
        ieQuirks: null,
        msie: /msie/.test(r) && !/opera/.test(r),
        opera: /opera/.test(r)
    };
    s.ie6 = s.msie && /msie 6./.test(r) && "object" != typeof window.XMLHttpRequest,
    s.ie7 = s.msie && /msie 7.0/.test(r),
    e.modal = function(t, n) {
        return e.modal.impl.init(t, n)
    },
    e.modal.close = function() {
        e.modal.impl.close()
    },
    e.modal.focus = function(t) {
        e.modal.impl.focus(t)
    },
    e.modal.setContainerDimensions = function() {
        e.modal.impl.setContainerDimensions()
    },
    e.modal.setPosition = function() {
        e.modal.impl.setPosition()
    },
    e.modal.update = function(t, n) {
        e.modal.impl.update(t, n)
    },
    e.fn.modal = function(t) {
        return e.modal.impl.init(this, t)
    },
    e.modal.defaults = {
        appendTo: "body",
        focus: !0,
        opacity: 61.8,
        overlayId: "simplemodal-overlay",
        overlayCss: {},
        containerId: "simplemodal-container",
        containerCss: {},
        dataId: "simplemodal-data",
        dataCss: {},
        minHeight: null,
        minWidth: null,
        maxHeight: null,
        maxWidth: null,
        autoResize: !1,
        autoPosition: !0,
        zIndex: 1e3,
        close: !0,
        closeHTML: '<a class="modalCloseImg" title="Close"></a>',
        closeClass: "simplemodal-close",
        escClose: !0,
        overlayClose: !1,
        fixed: !0,
        position: null,
        persist: !1,
        modal: !0,
        onOpen: null,
        onShow: null,
        onClose: null,
        afterClose: null
    },
    e.modal.impl = {
        d: {},
        init: function(t, n) {
            var r = this;
            if (r.d.data) return ! 1;
            if (s.ieQuirks = s.msie && !e.support.boxModel, r.o = e.extend({},
            e.modal.defaults, n), r.zIndex = r.o.zIndex, r.occb = !1, "object" == typeof t) t = t instanceof e ? t: e(t),
            r.d.placeholder = !1,
            t.parent().parent().size() > 0 && (t.before(e("<span></span>").attr("id", "simplemodal-placeholder").css({
                display: "none"
            })), r.d.placeholder = !0, r.display = t.css("display"), r.o.persist || (r.d.orig = t.clone(!0)));
            else {
                if ("string" != typeof t && "number" != typeof t) return alert("SimpleModal Error: Unsupported data type: " + typeof t),
                r;
                t = e("<div></div>").html(t)
            }
            return r.create(t),
            t = null,
            r.open(),
            e.isFunction(r.o.onShow) && r.o.onShow.apply(r, [r.d]),
            r
        },
        create: function(n) {
            var r = this;
            r.getDimensions(),
            r.d.overlay = e("<div></div>").attr("id", r.o.overlayId).addClass("simplemodal-overlay").css(e.extend(r.o.overlayCss, {
                display: "none",
                opacity: r.o.opacity / 100,
                height: r.o.modal ? t[0] : 0,
                width: r.o.modal ? t[1] : 0,
                position: "fixed",
                left: 0,
                top: 0,
                zIndex: r.o.zIndex + 1
            })).appendTo(r.o.appendTo),
            r.d.container = e("<div></div>").attr("id", r.o.containerId).addClass("simplemodal-container").css(e.extend({
                position: r.o.fixed ? "fixed": "absolute"
            },
            r.o.containerCss, {
                display: "none",
                zIndex: r.o.zIndex + 2
            })).append(r.o.close && r.o.closeHTML ? e(r.o.closeHTML).addClass(r.o.closeClass) : "").appendTo(r.o.appendTo),
            r.d.wrap = e("<div></div>").attr("tabIndex", -1).addClass("simplemodal-wrap").css({
                height: "645px",
                outline: 0,
                width: "100%"
            }).appendTo(r.d.container),
            r.d.data = n.attr("id", n.attr("id") || r.o.dataId).addClass("simplemodal-data").css(e.extend(r.o.dataCss, {
                display: "none"
            })).appendTo("body"),
            n = null,
            r.setContainerDimensions(),
            r.d.data.appendTo(r.d.wrap)
        },
        bindEvents: function() {
            var r = this;
            e("." + r.o.closeClass).bind("click.simplemodal",
            function(e) {
                e.preventDefault(),
                r.close()
            }),
            r.o.modal && r.o.close && r.o.overlayClose && r.d.overlay.bind("click.simplemodal",
            function(e) {
                e.preventDefault(),
                r.close()
            }),
            n.bind("keydown.simplemodal",
            function(e) {
                r.o.modal && 9 === e.keyCode ? r.watchTab(e) : r.o.close && r.o.escClose && 27 === e.keyCode && (e.preventDefault(), r.close())
            }),
            i.bind("resize.simplemodal orientationchange.simplemodal",
            function() {
                r.getDimensions(),
                r.o.autoResize ? r.setContainerDimensions() : r.o.autoPosition && r.setPosition(),
                r.o.modal && (r.d.iframe && r.d.iframe.css({
                    height: o[0],
                    width: o[1]
                }), r.d.overlay.css({
                    height: t[0],
                    width: t[1]
                }))
            })
        },
        unbindEvents: function() {
            e("." + this.o.closeClass).unbind("click.simplemodal"),
            n.unbind("keydown.simplemodal"),
            i.unbind(".simplemodal"),
            this.d.overlay.unbind("click.simplemodal")
        },
        focus: function(t) {
            var n = this,
            r = t && -1 !== e.inArray(t, ["first", "last"]) ? t: "first",
            i = e(":input:enabled:visible:" + r, n.d.wrap);
            setTimeout(function() {
                i.length > 0 ? i.focus() : n.d.wrap.focus()
            },
            10)
        },
        getDimensions: function() {
            var e = "undefined" == typeof window.innerHeight ? i.height() : window.innerHeight;
            t = [n.height(), n.width()],
            o = [e, i.width()]
        },
        getVal: function(e, t) {
            return e ? "number" == typeof e ? e: "auto" === e ? 0 : e.indexOf("%") > 0 ? parseInt(e.replace(/%/, "")) / 100 * ("h" === t ? o[0] : o[1]) : parseInt(e.replace(/px/, "")) : null
        },
        update: function(e, t) {
            var n = this;
            return n.d.data ? (n.d.origHeight = n.getVal(e, "h"), n.d.origWidth = n.getVal(t, "w"), n.d.data.hide(), e && n.d.container.css("height", e), t && n.d.container.css("width", t), n.setContainerDimensions(), n.d.data.show(), n.o.focus && n.focus(), n.unbindEvents(), void n.bindEvents()) : !1
        },
        setContainerDimensions: function() {
            var e = this,
            t = s.ie6 || s.ie7,
            n = e.d.origHeight ? e.d.origHeight: s.opera ? e.d.container.height() : e.getVal(t ? e.d.container[0].currentStyle.height: e.d.container.css("height"), "h"),
            r = e.d.origWidth ? e.d.origWidth: s.opera ? e.d.container.width() : e.getVal(t ? e.d.container[0].currentStyle.width: e.d.container.css("width"), "w"),
            i = e.d.data.outerHeight(!0),
            a = e.d.data.outerWidth(!0);
            e.d.origHeight = e.d.origHeight || n,
            e.d.origWidth = e.d.origWidth || r;
            var l = e.o.maxHeight ? e.getVal(e.o.maxHeight, "h") : null,
            u = e.o.maxWidth ? e.getVal(e.o.maxWidth, "w") : null,
            c = l && l < o[0] ? l: o[0],
            h = u && u < o[1] ? u: o[1],
            p = e.o.minHeight ? e.getVal(e.o.minHeight, "h") : "auto";
            n = n ? e.o.autoResize && n > c ? c: p > n ? p: n: i ? i > c ? c: e.o.minHeight && "auto" !== p && p > i ? p: i: p;
            var d = e.o.minWidth ? e.getVal(e.o.minWidth, "w") : "auto";
            r = r ? e.o.autoResize && r > h ? h: d > r ? d: r: a ? a > h ? h: e.o.minWidth && "auto" !== d && d > a ? d: a: d,
            e.d.container.css({
                height: n,
                width: r
            }),
            e.d.wrap.css({
                overflow: i > n || a > r ? "hidden": "visible"
            }),
            e.o.autoPosition && e.setPosition()
        },
        setPosition: function() {
            var e, t, n = this,
            r = o[0] / 2 - n.d.container.outerHeight(!0) / 2,
            s = o[1] / 2 - n.d.container.outerWidth(!0) / 2,
            a = "fixed" !== n.d.container.css("position") ? i.scrollTop() : 0;
            n.o.position && "[object Array]" === Object.prototype.toString.call(n.o.position) ? (e = a + (n.o.position[0] || r), t = n.o.position[1] || s) : (e = a + r, t = s),
            n.d.container.css({
                left: t,
                top: e
            })
        },
        watchTab: function(t) {
            var n = this;
            if (e(t.target).parents(".simplemodal-container").length > 0) {
                if (n.inputs = e(":input:enabled:visible:first, :input:enabled:visible:last", n.d.data[0]), !t.shiftKey && t.target === n.inputs[n.inputs.length - 1] || t.shiftKey && t.target === n.inputs[0] || 0 === n.inputs.length) {
                    t.preventDefault();
                    var r = t.shiftKey ? "last": "first";
                    n.focus(r)
                }
            } else t.preventDefault(),
            n.focus()
        },
        open: function() {
            var t = this;
            t.d.iframe && t.d.iframe.show(),
            e("body").addClass("lucky-overflow"),
            e.isFunction(t.o.onOpen) ? t.o.onOpen.apply(t, [t.d]) : (t.d.overlay.show(), t.d.container.show(), t.d.data.show()),
            t.o.focus && t.focus(),
            t.bindEvents()
        },
        close: function() {
            var t = this;
            if (!t.d.data) return ! 1;
            if (e("body").removeClass("lucky-overflow"), t.unbindEvents(), e.isFunction(t.o.onClose) && !t.occb) t.occb = !0,
            t.o.onClose.apply(t, [t.d]);
            else {
                if (t.d.placeholder) {
                    var n = e("#simplemodal-placeholder");
                    t.o.persist ? n.replaceWith(t.d.data.removeClass("simplemodal-data").css("display", t.display)) : (t.d.data.fadeOut("slow").remove(), n.replaceWith(t.d.orig))
                } else t.d.data.hide().remove();
                t.d.container.hide().remove(),
                t.d.overlay.hide(),
                t.d.iframe && t.d.iframe.hide().remove(),
                t.d.overlay.remove(),
                e.isFunction(t.o.afterClose) && t.o.afterClose.apply(t, [t.d]),
                t.d = {}
            }
        }
    }
}),
function(e, t, n) {
    t.smartisan = {},
    t.smartisan.isMobile = function() {
        var n = e.devicePixelRatio || 1;
        return t(e).width() <= 736 && (screen.width <= 736 || n >= 2)
    };
    var r = e.location.pathname.match(/\/(jp|en|cn)\//i); !
    function() {
        if (r) t.smartisan.lang = r[1];
        else if ( - 1 != location.hash.indexOf("lang=")) {
            var e = location.hash.split("lang=");
            t.smartisan.lang = e[1]
        } else t.smartisan.lang = "cn"
    } ()
} (window, jQuery),
function(e, t, n) {
    "use strict";
    function r(e) {
        return function() {
            var t, n, r = arguments[0],
            i = "[" + (e ? e + ":": "") + r + "] ",
            o = arguments[1],
            s = arguments,
            a = function(e) {
                return "function" == typeof e ? e.toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof e ? "undefined": "string" != typeof e ? JSON.stringify(e) : e
            };
            for (t = i + o.replace(/\{\d+\}/g,
            function(e) {
                var t, n = +e.slice(1, -1);
                return n + 2 < s.length ? (t = s[n + 2], "function" == typeof t ? t.toString().replace(/ ?\{[\s\S]*$/, "") : "undefined" == typeof t ? "undefined": "string" != typeof t ? q(t) : t) : e
            }), t = t + "\nhttp://errors.angularjs.org/1.2.20/" + (e ? e + "/": "") + r, n = 2; n < arguments.length; n++) t = t + (2 == n ? "?": "&") + "p" + (n - 2) + "=" + encodeURIComponent(a(arguments[n]));
            return new Error(t)
        }
    }
    function i(e) {
        if (null == e || T(e)) return ! 1;
        var t = e.length;
        return 1 === e.nodeType && t ? !0 : b(e) || Sn(e) || 0 === t || "number" == typeof t && t > 0 && t - 1 in e
    }
    function o(e, t, n) {
        var r;
        if (e) if (w(e)) for (r in e)"prototype" == r || "length" == r || "name" == r || e.hasOwnProperty && !e.hasOwnProperty(r) || t.call(n, e[r], r);
        else if (e.forEach && e.forEach !== o) e.forEach(t, n);
        else if (i(e)) for (r = 0; r < e.length; r++) t.call(n, e[r], r);
        else for (r in e) e.hasOwnProperty(r) && t.call(n, e[r], r);
        return e
    }
    function s(e) {
        var t = [];
        for (var n in e) e.hasOwnProperty(n) && t.push(n);
        return t.sort()
    }
    function a(e, t, n) {
        for (var r = s(e), i = 0; i < r.length; i++) t.call(n, e[r[i]], r[i]);
        return r
    }
    function l(e) {
        return function(t, n) {
            e(n, t)
        }
    }
    function u() {
        for (var e, t = _n.length; t;) {
            if (t--, e = _n[t].charCodeAt(0), 57 == e) return _n[t] = "A",
            _n.join("");
            if (90 != e) return _n[t] = String.fromCharCode(e + 1),
            _n.join("");
            _n[t] = "0"
        }
        return _n.unshift("0"),
        _n.join("")
    }
    function c(e, t) {
        t ? e.$$hashKey = t: delete e.$$hashKey
    }
    function h(e) {
        var t = e.$$hashKey;
        return o(arguments,
        function(t) {
            t !== e && o(t,
            function(t, n) {
                e[n] = t
            })
        }),
        c(e, t),
        e
    }
    function p(e) {
        return parseInt(e, 10)
    }
    function d(e, t) {
        return h(new(h(function() {},
        {
            prototype: e
        })), t)
    }
    function f() {}
    function v(e) {
        return e
    }
    function m(e) {
        return function() {
            return e
        }
    }
    function g(e) {
        return "undefined" == typeof e
    }
    function y(e) {
        return "undefined" != typeof e
    }
    function j(e) {
        return null != e && "object" == typeof e
    }
    function b(e) {
        return "string" == typeof e
    }
    function $(e) {
        return "number" == typeof e
    }
    function x(e) {
        return "[object Date]" === Tn.call(e)
    }
    function w(e) {
        return "function" == typeof e
    }
    function C(e) {
        return "[object RegExp]" === Tn.call(e)
    }
    function T(e) {
        return e && e.document && e.location && e.alert && e.setInterval
    }
    function k(e) {
        return e && e.$evalAsync && e.$watch
    }
    function E(e) {
        return "[object File]" === Tn.call(e)
    }
    function _(e) {
        return "[object Blob]" === Tn.call(e)
    }
    function S(e) {
        return ! (!e || !(e.nodeName || e.prop && e.attr && e.find))
    }
    function M(e, t, n) {
        var r = [];
        return o(e,
        function(e, i, o) {
            r.push(t.call(n, e, i, o))
        }),
        r
    }
    function P(e, t) {
        return - 1 != A(e, t)
    }
    function A(e, t) {
        if (e.indexOf) return e.indexOf(t);
        for (var n = 0; n < e.length; n++) if (t === e[n]) return n;
        return - 1
    }
    function N(e, t) {
        var n = A(e, t);
        return n >= 0 && e.splice(n, 1),
        t
    }
    function R(e, t, n, r) {
        if (T(e) || k(e)) throw kn("cpws", "Can't copy! Making copies of Window or Scope instances is not supported.");
        if (t) {
            if (e === t) throw kn("cpi", "Can't copy! Source and destination are identical.");
            if (n = n || [], r = r || [], j(e)) {
                var i = A(n, e);
                if ( - 1 !== i) return r[i];
                n.push(e),
                r.push(t)
            }
            var s;
            if (Sn(e)) {
                t.length = 0;
                for (var a = 0; a < e.length; a++) s = R(e[a], null, n, r),
                j(e[a]) && (n.push(e[a]), r.push(s)),
                t.push(s)
            } else {
                var l = t.$$hashKey;
                o(t,
                function(e, n) {
                    delete t[n]
                });
                for (var u in e) s = R(e[u], null, n, r),
                j(e[u]) && (n.push(e[u]), r.push(s)),
                t[u] = s;
                c(t, l)
            }
        } else t = e,
        e && (Sn(e) ? t = R(e, [], n, r) : x(e) ? t = new Date(e.getTime()) : C(e) ? t = new RegExp(e.source) : j(e) && (t = R(e, {},
        n, r)));
        return t
    }
    function D(e, t) {
        if (Sn(e)) {
            t = t || [];
            for (var n = 0; n < e.length; n++) t[n] = e[n]
        } else if (j(e)) {
            t = t || {};
            for (var r in e) ! fn.call(e, r) || "$" === r.charAt(0) && "$" === r.charAt(1) || (t[r] = e[r])
        }
        return t || e
    }
    function O(e, t) {
        if (e === t) return ! 0;
        if (null === e || null === t) return ! 1;
        if (e !== e && t !== t) return ! 0;
        var r, i, o, s = typeof e,
        a = typeof t;
        if (s == a && "object" == s) {
            if (!Sn(e)) {
                if (x(e)) return x(t) && e.getTime() == t.getTime();
                if (C(e) && C(t)) return e.toString() == t.toString();
                if (k(e) || k(t) || T(e) || T(t) || Sn(t)) return ! 1;
                o = {};
                for (i in e) if ("$" !== i.charAt(0) && !w(e[i])) {
                    if (!O(e[i], t[i])) return ! 1;
                    o[i] = !0
                }
                for (i in t) if (!o.hasOwnProperty(i) && "$" !== i.charAt(0) && t[i] !== n && !w(t[i])) return ! 1;
                return ! 0
            }
            if (!Sn(t)) return ! 1;
            if ((r = e.length) == t.length) {
                for (i = 0; r > i; i++) if (!O(e[i], t[i])) return ! 1;
                return ! 0
            }
        }
        return ! 1
    }
    function L() {
        return t.securityPolicy && t.securityPolicy.isActive || t.querySelector && !(!t.querySelector("[ng-csp]") && !t.querySelector("[data-ng-csp]"))
    }
    function F(e, t, n) {
        return e.concat(wn.call(t, n))
    }
    function H(e, t) {
        return wn.call(e, t || 0)
    }
    function I(e, t) {
        var n = arguments.length > 2 ? H(arguments, 2) : [];
        return ! w(t) || t instanceof RegExp ? t: n.length ?
        function() {
            return arguments.length ? t.apply(e, n.concat(wn.call(arguments, 0))) : t.apply(e, n)
        }: function() {
            return arguments.length ? t.apply(e, arguments) : t.call(e)
        }
    }
    function B(e, r) {
        var i = r;
        return "string" == typeof e && "$" === e.charAt(0) ? i = n: T(r) ? i = "$WINDOW": r && t === r ? i = "$DOCUMENT": k(r) && (i = "$SCOPE"),
        i
    }
    function q(e, t) {
        return "undefined" == typeof e ? n: JSON.stringify(e, B, t ? "  ": null)
    }
    function U(e) {
        return b(e) ? JSON.parse(e) : e
    }
    function V(e) {
        if ("function" == typeof e) e = !0;
        else if (e && 0 !== e.length) {
            var t = dn("" + e);
            e = !("f" == t || "0" == t || "false" == t || "no" == t || "n" == t || "[]" == t)
        } else e = !1;
        return e
    }
    function Q(e) {
        e = jn(e).clone();
        try {
            e.empty()
        } catch(t) {}
        var n = 3,
        r = jn("<div>").append(e).html();
        try {
            return e[0].nodeType === n ? dn(r) : r.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,
            function(e, t) {
                return "<" + dn(t)
            })
        } catch(t) {
            return dn(r)
        }
    }
    function W(e) {
        try {
            return decodeURIComponent(e)
        } catch(t) {}
    }
    function z(e) {
        var t, n, r = {};
        return o((e || "").split("&"),
        function(e) {
            if (e && (t = e.split("="), n = W(t[0]), y(n))) {
                var i = y(t[1]) ? W(t[1]) : !0;
                fn.call(r, n) ? Sn(r[n]) ? r[n].push(i) : r[n] = [r[n], i] : r[n] = i
            }
        }),
        r
    }
    function X(e) {
        var t = [];
        return o(e,
        function(e, n) {
            Sn(e) ? o(e,
            function(e) {
                t.push(Y(n, !0) + (e === !0 ? "": "=" + Y(e, !0)))
            }) : t.push(Y(n, !0) + (e === !0 ? "": "=" + Y(e, !0)))
        }),
        t.length ? t.join("&") : ""
    }
    function G(e) {
        return Y(e, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+")
    }
    function Y(e, t) {
        return encodeURIComponent(e).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, t ? "%20": "+")
    }
    function J(e, n) {
        function r(e) {
            e && a.push(e)
        }
        var i, s, a = [e],
        l = ["ng:app", "ng-app", "x-ng-app", "data-ng-app"],
        u = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;
        o(l,
        function(n) {
            l[n] = !0,
            r(t.getElementById(n)),
            n = n.replace(":", "\\:"),
            e.querySelectorAll && (o(e.querySelectorAll("." + n), r), o(e.querySelectorAll("." + n + "\\:"), r), o(e.querySelectorAll("[" + n + "]"), r))
        }),
        o(a,
        function(e) {
            if (!i) {
                var t = " " + e.className + " ",
                n = u.exec(t);
                n ? (i = e, s = (n[2] || "").replace(/\s+/g, ",")) : o(e.attributes,
                function(t) { ! i && l[t.name] && (i = e, s = t.value)
                })
            }
        }),
        i && n(i, s ? [s] : [])
    }
    function K(n, r) {
        var i = function() {
            if (n = jn(n), n.injector()) {
                var e = n[0] === t ? "document": Q(n);
                throw kn("btstrpd", "App Already Bootstrapped with this Element '{0}'", e)
            }
            r = r || [],
            r.unshift(["$provide",
            function(e) {
                e.value("$rootElement", n)
            }]),
            r.unshift("ng");
            var i = Ne(r);
            return i.invoke(["$rootScope", "$rootElement", "$compile", "$injector", "$animate",
            function(e, t, n, r, i) {
                e.$apply(function() {
                    t.data("$injector", r),
                    n(t)(e)
                })
            }]),
            i
        },
        s = /^NG_DEFER_BOOTSTRAP!/;
        return e && !s.test(e.name) ? i() : (e.name = e.name.replace(s, ""), void(En.resumeBootstrap = function(e) {
            o(e,
            function(e) {
                r.push(e)
            }),
            i()
        }))
    }
    function Z(e, t) {
        return t = t || "_",
        e.replace(Pn,
        function(e, n) {
            return (n ? t: "") + e.toLowerCase()
        })
    }
    function ee() {
        bn = e.jQuery,
        bn && bn.fn.on ? (jn = bn, h(bn.fn, {
            scope: Qn.scope,
            isolateScope: Qn.isolateScope,
            controller: Qn.controller,
            injector: Qn.injector,
            inheritedData: Qn.inheritedData
        }), ce("remove", !0, !0, !1), ce("empty", !1, !1, !1), ce("html", !1, !1, !0)) : jn = fe,
        En.element = jn
    }
    function te(e, t, n) {
        if (!e) throw kn("areq", "Argument '{0}' is {1}", t || "?", n || "required");
        return e
    }
    function ne(e, t, n) {
        return n && Sn(e) && (e = e[e.length - 1]),
        te(w(e), t, "not a function, got " + (e && "object" == typeof e ? e.constructor.name || "Object": typeof e)),
        e
    }
    function re(e, t) {
        if ("hasOwnProperty" === e) throw kn("badname", "hasOwnProperty is not a valid {0} name", t)
    }
    function ie(e, t, n) {
        if (!t) return e;
        for (var r, i = t.split("."), o = e, s = i.length, a = 0; s > a; a++) r = i[a],
        e && (e = (o = e)[r]);
        return ! n && w(e) ? I(o, e) : e
    }
    function oe(e) {
        var t = e[0],
        n = e[e.length - 1];
        if (t === n) return jn(t);
        var r = t,
        i = [r];
        do {
            if (r = r.nextSibling, !r) break;
            i.push(r)
        } while ( r !== n );
        return jn(i)
    }
    function se(e) {
        function t(e, t, n) {
            return e[t] || (e[t] = n())
        }
        var n = r("$injector"),
        i = r("ng"),
        o = t(e, "angular", Object);
        return o.$$minErr = o.$$minErr || r,
        t(o, "module",
        function() {
            var e = {};
            return function(r, o, s) {
                var a = function(e, t) {
                    if ("hasOwnProperty" === e) throw i("badname", "hasOwnProperty is not a valid {0} name", t)
                };
                return a(r, "module"),
                o && e.hasOwnProperty(r) && (e[r] = null),
                t(e, r,
                function() {
                    function e(e, n, r) {
                        return function() {
                            return t[r || "push"]([e, n, arguments]),
                            l
                        }
                    }
                    if (!o) throw n("nomod", "Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.", r);
                    var t = [],
                    i = [],
                    a = e("$injector", "invoke"),
                    l = {
                        _invokeQueue: t,
                        _runBlocks: i,
                        requires: o,
                        name: r,
                        provider: e("$provide", "provider"),
                        factory: e("$provide", "factory"),
                        service: e("$provide", "service"),
                        value: e("$provide", "value"),
                        constant: e("$provide", "constant", "unshift"),
                        animation: e("$animateProvider", "register"),
                        filter: e("$filterProvider", "register"),
                        controller: e("$controllerProvider", "register"),
                        directive: e("$compileProvider", "directive"),
                        config: a,
                        run: function(e) {
                            return i.push(e),
                            this
                        }
                    };
                    return s && a(s),
                    l
                })
            }
        })
    }
    function ae(t) {
        h(t, {
            bootstrap: K,
            copy: R,
            extend: h,
            equals: O,
            element: jn,
            forEach: o,
            injector: Ne,
            noop: f,
            bind: I,
            toJson: q,
            fromJson: U,
            identity: v,
            isUndefined: g,
            isDefined: y,
            isString: b,
            isFunction: w,
            isObject: j,
            isNumber: $,
            isElement: S,
            isArray: Sn,
            version: An,
            isDate: x,
            lowercase: dn,
            uppercase: vn,
            callbacks: {
                counter: 0
            },
            $$minErr: r,
            $$csp: L
        }),
        $n = se(e);
        try {
            $n("ngLocale")
        } catch(n) {
            $n("ngLocale", []).provider("$locale", nt)
        }
        $n("ng", ["ngLocale"], ["$provide",
        function(e) {
            e.provider({
                $$sanitizeUri: _t
            }),
            e.provider("$compile", Ie).directive({
                a: _r,
                input: Hr,
                textarea: Hr,
                form: Ar,
                script: bi,
                select: wi,
                style: Ti,
                option: Ci,
                ngBind: Jr,
                ngBindHtml: Zr,
                ngBindTemplate: Kr,
                ngClass: ei,
                ngClassEven: ni,
                ngClassOdd: ti,
                ngCloak: ri,
                ngController: ii,
                ngForm: Nr,
                ngHide: fi,
                ngIf: si,
                ngInclude: ai,
                ngInit: ui,
                ngNonBindable: ci,
                ngPluralize: hi,
                ngRepeat: pi,
                ngShow: di,
                ngStyle: vi,
                ngSwitch: mi,
                ngSwitchWhen: gi,
                ngSwitchDefault: yi,
                ngOptions: xi,
                ngTransclude: ji,
                ngModel: Qr,
                ngList: Xr,
                ngChange: Wr,
                required: zr,
                ngRequired: zr,
                ngValue: Yr
            }).directive({
                ngInclude: li
            }).directive(Sr).directive(oi),
            e.provider({
                $anchorScroll: Re,
                $animate: er,
                $browser: Le,
                $cacheFactory: Fe,
                $controller: Ue,
                $document: Ve,
                $exceptionHandler: Qe,
                $filter: Ht,
                $interpolate: et,
                $interval: tt,
                $http: Ye,
                $httpBackend: Ke,
                $location: vt,
                $log: mt,
                $parse: wt,
                $rootScope: Et,
                $q: Ct,
                $sce: Nt,
                $sceDelegate: At,
                $sniffer: Rt,
                $templateCache: He,
                $timeout: Dt,
                $window: Ft,
                $$rAF: kt,
                $$asyncCallback: De
            })
        }])
    }
    function le() {
        return++Rn
    }
    function ue(e) {
        return e.replace(Ln,
        function(e, t, n, r) {
            return r ? n.toUpperCase() : n
        }).replace(Fn, "Moz$1")
    }
    function ce(e, t, n, r) {
        function i(e) {
            var i, s, a, l, u, c, h, p = n && e ? [this.filter(e)] : [this],
            d = t;
            if (!r || null != e) for (; p.length;) for (i = p.shift(), s = 0, a = i.length; a > s; s++) for (l = jn(i[s]), d ? l.triggerHandler("$destroy") : d = !d, u = 0, c = (h = l.children()).length; c > u; u++) p.push(bn(h[u]));
            return o.apply(this, arguments)
        }
        var o = bn.fn[e];
        o = o.$original || o,
        i.$original = o,
        bn.fn[e] = i
    }
    function he(e) {
        return ! Bn.test(e)
    }
    function pe(e, t) {
        var n, r, i, o, s, a, l = t.createDocumentFragment(),
        u = [];
        if (he(e)) u.push(t.createTextNode(e));
        else {
            for (n = l.appendChild(t.createElement("div")), r = (qn.exec(e) || ["", ""])[1].toLowerCase(), i = Vn[r] || Vn._default, n.innerHTML = "<div>&#160;</div>" + i[1] + e.replace(Un, "<$1></$2>") + i[2], n.removeChild(n.firstChild), o = i[0]; o--;) n = n.lastChild;
            for (s = 0, a = n.childNodes.length; a > s; ++s) u.push(n.childNodes[s]);
            n = l.firstChild,
            n.textContent = ""
        }
        return l.textContent = "",
        l.innerHTML = "",
        u
    }
    function de(e, n) {
        n = n || t;
        var r;
        return (r = In.exec(e)) ? [n.createElement(r[1])] : pe(e, n)
    }
    function fe(e) {
        if (e instanceof fe) return e;
        if (b(e) && (e = Mn(e)), !(this instanceof fe)) {
            if (b(e) && "<" != e.charAt(0)) throw Hn("nosel", "Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element");
            return new fe(e)
        }
        if (b(e)) {
            Ce(this, de(e));
            var n = jn(t.createDocumentFragment());
            n.append(this)
        } else Ce(this, e)
    }
    function ve(e) {
        return e.cloneNode(!0)
    }
    function me(e) {
        ye(e);
        for (var t = 0,
        n = e.childNodes || []; t < n.length; t++) me(n[t])
    }
    function ge(e, t, n, r) {
        if (y(r)) throw Hn("offargs", "jqLite#off() does not support the `selector` argument");
        var i = je(e, "events"),
        s = je(e, "handle");
        s && (g(t) ? o(i,
        function(t, n) {
            On(e, n, t),
            delete i[n]
        }) : o(t.split(" "),
        function(t) {
            g(n) ? (On(e, t, i[t]), delete i[t]) : N(i[t] || [], n)
        }))
    }
    function ye(e, t) {
        var r = e.ng339,
        i = Nn[r];
        if (i) {
            if (t) return void delete Nn[r].data[t];
            i.handle && (i.events.$destroy && i.handle({},
            "$destroy"), ge(e)),
            delete Nn[r],
            e.ng339 = n
        }
    }
    function je(e, t, n) {
        var r = e.ng339,
        i = Nn[r || -1];
        return y(n) ? (i || (e.ng339 = r = le(), i = Nn[r] = {}), void(i[t] = n)) : i && i[t]
    }
    function be(e, t, n) {
        var r = je(e, "data"),
        i = y(n),
        o = !i && y(t),
        s = o && !j(t);
        if (r || s || je(e, "data", r = {}), i) r[t] = n;
        else {
            if (!o) return r;
            if (s) return r && r[t];
            h(r, t)
        }
    }
    function $e(e, t) {
        return e.getAttribute ? (" " + (e.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").indexOf(" " + t + " ") > -1 : !1
    }
    function xe(e, t) {
        t && e.setAttribute && o(t.split(" "),
        function(t) {
            e.setAttribute("class", Mn((" " + (e.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").replace(" " + Mn(t) + " ", " ")))
        })
    }
    function we(e, t) {
        if (t && e.setAttribute) {
            var n = (" " + (e.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ");
            o(t.split(" "),
            function(e) {
                e = Mn(e),
                -1 === n.indexOf(" " + e + " ") && (n += e + " ")
            }),
            e.setAttribute("class", Mn(n))
        }
    }
    function Ce(e, t) {
        if (t) {
            t = t.nodeName || !y(t.length) || T(t) ? [t] : t;
            for (var n = 0; n < t.length; n++) e.push(t[n])
        }
    }
    function Te(e, t) {
        return ke(e, "$" + (t || "ngController") + "Controller")
    }
    function ke(e, t, r) {
        e = jn(e),
        9 == e[0].nodeType && (e = e.find("html"));
        for (var i = Sn(t) ? t: [t]; e.length;) {
            for (var o = e[0], s = 0, a = i.length; a > s; s++) if ((r = e.data(i[s])) !== n) return r;
            e = jn(o.parentNode || 11 === o.nodeType && o.host)
        }
    }
    function Ee(e) {
        for (var t = 0,
        n = e.childNodes; t < n.length; t++) me(n[t]);
        for (; e.firstChild;) e.removeChild(e.firstChild)
    }
    function _e(e, t) {
        var n = Wn[t.toLowerCase()];
        return n && zn[e.nodeName] && n
    }
    function Se(e, n) {
        var r = function(r, i) {
            if (r.preventDefault || (r.preventDefault = function() {
                r.returnValue = !1
            }), r.stopPropagation || (r.stopPropagation = function() {
                r.cancelBubble = !0
            }), r.target || (r.target = r.srcElement || t), g(r.defaultPrevented)) {
                var s = r.preventDefault;
                r.preventDefault = function() {
                    r.defaultPrevented = !0,
                    s.call(r)
                },
                r.defaultPrevented = !1
            }
            r.isDefaultPrevented = function() {
                return r.defaultPrevented || r.returnValue === !1
            };
            var a = D(n[i || r.type] || []);
            o(a,
            function(t) {
                t.call(e, r)
            }),
            8 >= yn ? (r.preventDefault = null, r.stopPropagation = null, r.isDefaultPrevented = null) : (delete r.preventDefault, delete r.stopPropagation, delete r.isDefaultPrevented)
        };
        return r.elem = e,
        r
    }
    function Me(e, t) {
        var r, i = typeof e;
        return "function" == i || "object" == i && null !== e ? "function" == typeof(r = e.$$hashKey) ? r = e.$$hashKey() : r === n && (r = e.$$hashKey = (t || u)()) : r = e,
        i + ":" + r
    }
    function Pe(e, t) {
        if (t) {
            var n = 0;
            this.nextUid = function() {
                return++n
            }
        }
        o(e, this.put, this)
    }
    function Ae(e) {
        var t, n, r, i;
        return "function" == typeof e ? (t = e.$inject) || (t = [], e.length && (n = e.toString().replace(Jn, ""), r = n.match(Xn), o(r[1].split(Gn),
        function(e) {
            e.replace(Yn,
            function(e, n, r) {
                t.push(r)
            })
        })), e.$inject = t) : Sn(e) ? (i = e.length - 1, ne(e[i], "fn"), t = e.slice(0, i)) : ne(e, "fn", !0),
        t
    }
    function Ne(e) {
        function t(e) {
            return function(t, n) {
                return j(t) ? void o(t, l(e)) : e(t, n)
            }
        }
        function n(e, t) {
            if (re(e, "service"), (w(t) || Sn(t)) && (t = $.instantiate(t)), !t.$get) throw Kn("pget", "Provider '{0}' must define $get factory method.", e);
            return y[e + d] = t
        }
        function r(e, t) {
            return n(e, {
                $get: t
            })
        }
        function i(e, t) {
            return r(e, ["$injector",
            function(e) {
                return e.instantiate(t)
            }])
        }
        function s(e, t) {
            return r(e, m(t))
        }
        function a(e, t) {
            re(e, "constant"),
            y[e] = t,
            x[e] = t
        }
        function u(e, t) {
            var n = $.get(e + d),
            r = n.$get;
            n.$get = function() {
                var e = C.invoke(r, n);
                return C.invoke(t, null, {
                    $delegate: e
                })
            }
        }
        function c(e) {
            var t, n, r, i, s = [];
            return o(e,
            function(e) {
                if (!g.get(e)) {
                    g.put(e, !0);
                    try {
                        if (b(e)) for (t = $n(e), s = s.concat(c(t.requires)).concat(t._runBlocks), n = t._invokeQueue, r = 0, i = n.length; i > r; r++) {
                            var o = n[r],
                            a = $.get(o[0]);
                            a[o[1]].apply(a, o[2])
                        } else w(e) ? s.push($.invoke(e)) : Sn(e) ? s.push($.invoke(e)) : ne(e, "module")
                    } catch(l) {
                        throw Sn(e) && (e = e[e.length - 1]),
                        l.message && l.stack && -1 == l.stack.indexOf(l.message) && (l = l.message + "\n" + l.stack),
                        Kn("modulerr", "Failed to instantiate module {0} due to:\n{1}", e, l.stack || l.message || l)
                    }
                }
            }),
            s
        }
        function h(e, t) {
            function n(n) {
                if (e.hasOwnProperty(n)) {
                    if (e[n] === p) throw Kn("cdep", "Circular dependency found: {0}", n + " <- " + v.join(" <- "));
                    return e[n]
                }
                try {
                    return v.unshift(n),
                    e[n] = p,
                    e[n] = t(n)
                } catch(r) {
                    throw e[n] === p && delete e[n],
                    r
                } finally {
                    v.shift()
                }
            }
            function r(e, t, r) {
                var i, o, s, a = [],
                l = Ae(e);
                for (o = 0, i = l.length; i > o; o++) {
                    if (s = l[o], "string" != typeof s) throw Kn("itkn", "Incorrect injection token! Expected service name as string, got {0}", s);
                    a.push(r && r.hasOwnProperty(s) ? r[s] : n(s))
                }
                return Sn(e) && (e = e[i]),
                e.apply(t, a)
            }
            function i(e, t) {
                var n, i, o = function() {};
                return o.prototype = (Sn(e) ? e[e.length - 1] : e).prototype,
                n = new o,
                i = r(e, n, t),
                j(i) || w(i) ? i: n
            }
            return {
                invoke: r,
                instantiate: i,
                get: n,
                annotate: Ae,
                has: function(t) {
                    return y.hasOwnProperty(t + d) || e.hasOwnProperty(t)
                }
            }
        }
        var p = {},
        d = "Provider",
        v = [],
        g = new Pe([], !0),
        y = {
            $provide: {
                provider: t(n),
                factory: t(r),
                service: t(i),
                value: t(s),
                constant: t(a),
                decorator: u
            }
        },
        $ = y.$injector = h(y,
        function() {
            throw Kn("unpr", "Unknown provider: {0}", v.join(" <- "))
        }),
        x = {},
        C = x.$injector = h(x,
        function(e) {
            var t = $.get(e + d);
            return C.invoke(t.$get, t)
        });
        return o(c(e),
        function(e) {
            C.invoke(e || f)
        }),
        C
    }
    function Re() {
        var e = !0;
        this.disableAutoScrolling = function() {
            e = !1
        },
        this.$get = ["$window", "$location", "$rootScope",
        function(t, n, r) {
            function i(e) {
                var t = null;
                return o(e,
                function(e) {
                    t || "a" !== dn(e.nodeName) || (t = e)
                }),
                t
            }
            function s() {
                var e, r = n.hash();
                r ? (e = a.getElementById(r)) ? e.scrollIntoView() : (e = i(a.getElementsByName(r))) ? e.scrollIntoView() : "top" === r && t.scrollTo(0, 0) : t.scrollTo(0, 0)
            }
            var a = t.document;
            return e && r.$watch(function() {
                return n.hash()
            },
            function() {
                r.$evalAsync(s)
            }),
            s
        }]
    }
    function De() {
        this.$get = ["$$rAF", "$timeout",
        function(e, t) {
            return e.supported ?
            function(t) {
                return e(t)
            }: function(e) {
                return t(e, 0, !1)
            }
        }]
    }
    function Oe(e, t, r, i) {
        function s(e) {
            try {
                e.apply(null, H(arguments, 1))
            } finally {
                if (y--, 0 === y) for (; j.length;) try {
                    j.pop()()
                } catch(t) {
                    r.error(t)
                }
            }
        }
        function a(e, t) { !
            function n() {
                o(x,
                function(e) {
                    e()
                }),
                $ = t(n, e)
            } ()
        }
        function l() {
            T = null,
            w != u.url() && (w = u.url(), o(k,
            function(e) {
                e(u.url())
            }))
        }
        var u = this,
        c = t[0],
        h = e.location,
        p = e.history,
        d = e.setTimeout,
        v = e.clearTimeout,
        m = {};
        u.isMock = !1;
        var y = 0,
        j = [];
        u.$$completeOutstandingRequest = s,
        u.$$incOutstandingRequestCount = function() {
            y++
        },
        u.notifyWhenNoOutstandingRequests = function(e) {
            o(x,
            function(e) {
                e()
            }),
            0 === y ? e() : j.push(e)
        };
        var $, x = [];
        u.addPollFn = function(e) {
            return g($) && a(100, d),
            x.push(e),
            e
        };
        var w = h.href,
        C = t.find("base"),
        T = null;
        u.url = function(t, n) {
            if (h !== e.location && (h = e.location), p !== e.history && (p = e.history), t) {
                if (w == t) return;
                return w = t,
                i.history ? n ? p.replaceState(null, "", t) : (p.pushState(null, "", t), C.attr("href", C.attr("href"))) : (T = t, n ? h.replace(t) : h.href = t),
                u
            }
            return T || h.href.replace(/%27/g, "'")
        };
        var k = [],
        E = !1;
        u.onUrlChange = function(t) {
            return E || (i.history && jn(e).on("popstate", l), i.hashchange ? jn(e).on("hashchange", l) : u.addPollFn(l), E = !0),
            k.push(t),
            t
        },
        u.baseHref = function() {
            var e = C.attr("href");
            return e ? e.replace(/^(https?\:)?\/\/[^\/]*/, "") : ""
        };
        var _ = {},
        S = "",
        M = u.baseHref();
        u.cookies = function(e, t) {
            var i, o, s, a, l;
            if (!e) {
                if (c.cookie !== S) for (S = c.cookie, o = S.split("; "), _ = {},
                a = 0; a < o.length; a++) s = o[a],
                l = s.indexOf("="),
                l > 0 && (e = unescape(s.substring(0, l)), _[e] === n && (_[e] = unescape(s.substring(l + 1))));
                return _
            }
            t === n ? c.cookie = escape(e) + "=;path=" + M + ";expires=Thu, 01 Jan 1970 00:00:00 GMT": b(t) && (i = (c.cookie = escape(e) + "=" + escape(t) + ";path=" + M).length + 1, i > 4096 && r.warn("Cookie '" + e + "' possibly not set or overflowed because it was too large (" + i + " > 4096 bytes)!"));
        },
        u.defer = function(e, t) {
            var n;
            return y++,
            n = d(function() {
                delete m[n],
                s(e)
            },
            t || 0),
            m[n] = !0,
            n
        },
        u.defer.cancel = function(e) {
            return m[e] ? (delete m[e], v(e), s(f), !0) : !1
        }
    }
    function Le() {
        this.$get = ["$window", "$log", "$sniffer", "$document",
        function(e, t, n, r) {
            return new Oe(e, r, t, n)
        }]
    }
    function Fe() {
        this.$get = function() {
            function e(e, n) {
                function i(e) {
                    e != p && (d ? d == e && (d = e.n) : d = e, o(e.n, e.p), o(e, p), p = e, p.n = null)
                }
                function o(e, t) {
                    e != t && (e && (e.p = t), t && (t.n = e))
                }
                if (e in t) throw r("$cacheFactory")("iid", "CacheId '{0}' is already taken!", e);
                var s = 0,
                a = h({},
                n, {
                    id: e
                }),
                l = {},
                u = n && n.capacity || Number.MAX_VALUE,
                c = {},
                p = null,
                d = null;
                return t[e] = {
                    put: function(e, t) {
                        if (u < Number.MAX_VALUE) {
                            var n = c[e] || (c[e] = {
                                key: e
                            });
                            i(n)
                        }
                        if (!g(t)) return e in l || s++,
                        l[e] = t,
                        s > u && this.remove(d.key),
                        t
                    },
                    get: function(e) {
                        if (u < Number.MAX_VALUE) {
                            var t = c[e];
                            if (!t) return;
                            i(t)
                        }
                        return l[e]
                    },
                    remove: function(e) {
                        if (u < Number.MAX_VALUE) {
                            var t = c[e];
                            if (!t) return;
                            t == p && (p = t.p),
                            t == d && (d = t.n),
                            o(t.n, t.p),
                            delete c[e]
                        }
                        delete l[e],
                        s--
                    },
                    removeAll: function() {
                        l = {},
                        s = 0,
                        c = {},
                        p = d = null
                    },
                    destroy: function() {
                        l = null,
                        a = null,
                        c = null,
                        delete t[e]
                    },
                    info: function() {
                        return h({},
                        a, {
                            size: s
                        })
                    }
                }
            }
            var t = {};
            return e.info = function() {
                var e = {};
                return o(t,
                function(t, n) {
                    e[n] = t.info()
                }),
                e
            },
            e.get = function(e) {
                return t[e]
            },
            e
        }
    }
    function He() {
        this.$get = ["$cacheFactory",
        function(e) {
            return e("templates")
        }]
    }
    function Ie(e, r) {
        var i = {},
        s = "Directive",
        a = /^\s*directive\:\s*([\d\w_\-]+)\s+(.*)$/,
        u = /(([\d\w_\-]+)(?:\:([^;]+))?;?)/,
        c = /^(on[a-z]+|formaction)$/;
        this.directive = function p(t, n) {
            return re(t, "directive"),
            b(t) ? (te(n, "directiveFactory"), i.hasOwnProperty(t) || (i[t] = [], e.factory(t + s, ["$injector", "$exceptionHandler",
            function(e, n) {
                var r = [];
                return o(i[t],
                function(i, o) {
                    try {
                        var s = e.invoke(i);
                        w(s) ? s = {
                            compile: m(s)
                        }: !s.compile && s.link && (s.compile = m(s.link)),
                        s.priority = s.priority || 0,
                        s.index = o,
                        s.name = s.name || t,
                        s.require = s.require || s.controller && s.name,
                        s.restrict = s.restrict || "A",
                        r.push(s)
                    } catch(a) {
                        n(a)
                    }
                }),
                r
            }])), i[t].push(n)) : o(t, l(p)),
            this
        },
        this.aHrefSanitizationWhitelist = function(e) {
            return y(e) ? (r.aHrefSanitizationWhitelist(e), this) : r.aHrefSanitizationWhitelist()
        },
        this.imgSrcSanitizationWhitelist = function(e) {
            return y(e) ? (r.imgSrcSanitizationWhitelist(e), this) : r.imgSrcSanitizationWhitelist()
        },
        this.$get = ["$injector", "$interpolate", "$exceptionHandler", "$http", "$templateCache", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri",
        function(e, r, l, p, f, m, g, y, $, x, C, T) {
            function k(e, t, n, r, i) {
                e instanceof jn || (e = jn(e)),
                o(e,
                function(t, n) {
                    3 == t.nodeType && t.nodeValue.match(/\S+/) && (e[n] = t = jn(t).wrap("<span></span>").parent()[0])
                });
                var s = _(e, t, e, n, r, i);
                return E(e, "ng-scope"),
                function(t, n, r, i) {
                    te(t, "scope");
                    var a = n ? Qn.clone.call(e) : e;
                    o(r,
                    function(e, t) {
                        a.data("$" + t + "Controller", e)
                    });
                    for (var l = 0,
                    u = a.length; u > l; l++) {
                        var c = a[l],
                        h = c.nodeType;
                        1 !== h && 9 !== h || a.eq(l).data("$scope", t)
                    }
                    return n && n(a, t),
                    s && s(t, a, a, i),
                    a
                }
            }
            function E(e, t) {
                try {
                    e.addClass(t)
                } catch(n) {}
            }
            function _(e, t, r, i, o, s) {
                function a(e, r, i, o) {
                    var s, a, l, u, c, h, p, d, v, m = r.length,
                    g = new Array(m);
                    for (h = 0; m > h; h++) g[h] = r[h];
                    for (h = 0, d = 0, p = f.length; p > h; d++) l = g[d],
                    s = f[h++],
                    a = f[h++],
                    u = jn(l),
                    s ? (s.scope ? (c = e.$new(), u.data("$scope", c)) : c = e, v = s.transcludeOnThisElement ? S(e, s.transclude, o) : !s.templateOnThisElement && o ? o: !o && t ? S(e, t) : null, s(a, c, l, i, v)) : a && a(e, l.childNodes, n, o)
                }
                for (var l, u, c, h, p, d, f = [], v = 0; v < e.length; v++) l = new G,
                u = M(e[v], [], l, 0 === v ? i: n, o),
                c = u.length ? N(u, e[v], l, t, r, null, [], [], s) : null,
                c && c.scope && E(jn(e[v]), "ng-scope"),
                p = c && c.terminal || !(h = e[v].childNodes) || !h.length ? null: _(h, c ? (c.transcludeOnThisElement || !c.templateOnThisElement) && c.transclude: t),
                f.push(c, p),
                d = d || c || p,
                s = null;
                return d ? a: null
            }
            function S(e, t, n) {
                var r = function(r, i, o) {
                    var s = !1;
                    r || (r = e.$new(), r.$$transcluded = !0, s = !0);
                    var a = t(r, i, o, n);
                    return s && a.on("$destroy",
                    function() {
                        r.$destroy()
                    }),
                    a
                };
                return r
            }
            function M(e, t, n, r, i) {
                var o, s, l = e.nodeType,
                c = n.$attr;
                switch (l) {
                case 1:
                    L(t, Be(xn(e).toLowerCase()), "E", r, i);
                    for (var h, p, d, f, v, m, g = e.attributes,
                    y = 0,
                    j = g && g.length; j > y; y++) {
                        var $ = !1,
                        x = !1;
                        if (h = g[y], !yn || yn >= 8 || h.specified) {
                            p = h.name,
                            v = Mn(h.value),
                            f = Be(p),
                            (m = ee.test(f)) && (p = Z(f.substr(6), "-"));
                            var w = f.replace(/(Start|End)$/, "");
                            f === w + "Start" && ($ = p, x = p.substr(0, p.length - 5) + "end", p = p.substr(0, p.length - 6)),
                            d = Be(p.toLowerCase()),
                            c[d] = p,
                            !m && n.hasOwnProperty(d) || (n[d] = v, _e(e, d) && (n[d] = !0)),
                            W(e, t, v, d),
                            L(t, d, "A", r, i, $, x)
                        }
                    }
                    if (s = e.className, b(s) && "" !== s) for (; o = u.exec(s);) d = Be(o[2]),
                    L(t, d, "C", r, i) && (n[d] = Mn(o[3])),
                    s = s.substr(o.index + o[0].length);
                    break;
                case 3:
                    U(t, e.nodeValue);
                    break;
                case 8:
                    try {
                        o = a.exec(e.nodeValue),
                        o && (d = Be(o[1]), L(t, d, "M", r, i) && (n[d] = Mn(o[2])))
                    } catch(C) {}
                }
                return t.sort(B),
                t
            }
            function P(e, t, n) {
                var r = [],
                i = 0;
                if (t && e.hasAttribute && e.hasAttribute(t)) {
                    do {
                        if (!e) throw tr("uterdir", "Unterminated attribute, found '{0}' but no matching '{1}' found.", t, n);
                        1 == e.nodeType && (e.hasAttribute(t) && i++, e.hasAttribute(n) && i--), r.push(e), e = e.nextSibling
                    } while ( i > 0 )
                } else r.push(e);
                return jn(r)
            }
            function A(e, t, n) {
                return function(r, i, o, s, a) {
                    return i = P(i[0], t, n),
                    e(r, i, o, s, a)
                }
            }
            function N(e, i, s, a, u, c, h, p, d) {
                function f(e, t, n, r) {
                    e && (n && (e = A(e, n, r)), e.require = x.require, e.directiveName = C, (B === x || x.$$isolateScope) && (e = X(e, {
                        isolateScope: !0
                    })), h.push(e)),
                    t && (n && (t = A(t, n, r)), t.require = x.require, t.directiveName = C, (B === x || x.$$isolateScope) && (t = X(t, {
                        isolateScope: !0
                    })), p.push(t))
                }
                function v(e, t, n, r) {
                    var i, s = "data",
                    a = !1;
                    if (b(t)) {
                        for (;
                        "^" == (i = t.charAt(0)) || "?" == i;) t = t.substr(1),
                        "^" == i && (s = "inheritedData"),
                        a = a || "?" == i;
                        if (i = null, r && "data" === s && (i = r[t]), i = i || n[s]("$" + t + "Controller"), !i && !a) throw tr("ctreq", "Controller '{0}', required by directive '{1}', can't be found!", t, e);
                        return i
                    }
                    return Sn(t) && (i = [], o(t,
                    function(t) {
                        i.push(v(e, t, n, r))
                    })),
                    i
                }
                function y(e, t, a, u, c) {
                    function d(e, t) {
                        var r;
                        return arguments.length < 2 && (t = e, e = n),
                        J && (r = T),
                        c(e, t, r)
                    }
                    var f, y, j, b, $, x, w, C, T = {};
                    if (f = i === a ? s: D(s, new G(jn(a), s.$attr)), y = f.$$element, B) {
                        var k = /^\s*([@=&])(\??)\s*(\w*)\s*$/,
                        _ = jn(a);
                        w = t.$new(!0),
                        !U || U !== B && U !== B.$$originalDirective ? _.data("$isolateScopeNoTemplate", w) : _.data("$isolateScope", w),
                        E(_, "ng-isolate-scope"),
                        o(B.scope,
                        function(e, n) {
                            var i, o, s, a, l = e.match(k) || [],
                            u = l[3] || n,
                            c = "?" == l[2],
                            h = l[1];
                            switch (w.$$isolateBindings[n] = h + u, h) {
                            case "@":
                                f.$observe(u,
                                function(e) {
                                    w[n] = e
                                }),
                                f.$$observers[u].$$scope = t,
                                f[u] && (w[n] = r(f[u])(t));
                                break;
                            case "=":
                                if (c && !f[u]) return;
                                o = m(f[u]),
                                a = o.literal ? O: function(e, t) {
                                    return e === t
                                },
                                s = o.assign ||
                                function() {
                                    throw i = w[n] = o(t),
                                    tr("nonassign", "Expression '{0}' used with directive '{1}' is non-assignable!", f[u], B.name)
                                },
                                i = w[n] = o(t),
                                w.$watch(function() {
                                    var e = o(t);
                                    return a(e, w[n]) || (a(e, i) ? s(t, e = w[n]) : w[n] = e),
                                    i = e
                                },
                                null, o.literal);
                                break;
                            case "&":
                                o = m(f[u]),
                                w[n] = function(e) {
                                    return o(t, e)
                                };
                                break;
                            default:
                                throw tr("iscp", "Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}", B.name, n, e)
                            }
                        })
                    }
                    for (C = c && d, L && o(L,
                    function(e) {
                        var n, r = {
                            $scope: e === B || e.$$isolateScope ? w: t,
                            $element: y,
                            $attrs: f,
                            $transclude: C
                        };
                        x = e.controller,
                        "@" == x && (x = f[e.name]),
                        n = g(x, r),
                        T[e.name] = n,
                        J || y.data("$" + e.name + "Controller", n),
                        e.controllerAs && (r.$scope[e.controllerAs] = n)
                    }), j = 0, b = h.length; b > j; j++) try {
                        $ = h[j],
                        $($.isolateScope ? w: t, y, f, $.require && v($.directiveName, $.require, y, T), C)
                    } catch(S) {
                        l(S, Q(y))
                    }
                    var M = t;
                    for (B && (B.template || null === B.templateUrl) && (M = w), e && e(M, a.childNodes, n, c), j = p.length - 1; j >= 0; j--) try {
                        $ = p[j],
                        $($.isolateScope ? w: t, y, f, $.require && v($.directiveName, $.require, y, T), C)
                    } catch(S) {
                        l(S, Q(y))
                    }
                }
                d = d || {};
                for (var $, x, C, T, _, S, N = -Number.MAX_VALUE,
                L = d.controllerDirectives,
                B = d.newIsolateScopeDirective,
                U = d.templateDirective,
                V = d.nonTlbTranscludeDirective,
                W = !1,
                Y = !1,
                J = d.hasElementTranscludeDirective,
                Z = s.$$element = jn(i), ee = c, te = a, ne = 0, re = e.length; re > ne; ne++) {
                    x = e[ne];
                    var ie = x.$$start,
                    oe = x.$$end;
                    if (ie && (Z = P(i, ie, oe)), T = n, N > x.priority) break;
                    if ((S = x.scope) && ($ = $ || x, x.templateUrl || (q("new/isolated scope", B, x, Z), j(S) && (B = x))), C = x.name, !x.templateUrl && x.controller && (S = x.controller, L = L || {},
                    q("'" + C + "' controller", L[C], x, Z), L[C] = x), (S = x.transclude) && (W = !0, x.$$tlb || (q("transclusion", V, x, Z), V = x), "element" == S ? (J = !0, N = x.priority, T = P(i, ie, oe), Z = s.$$element = jn(t.createComment(" " + C + ": " + s[C] + " ")), i = Z[0], z(u, jn(H(T)), i), te = k(T, a, N, ee && ee.name, {
                        nonTlbTranscludeDirective: V
                    })) : (T = jn(ve(i)).contents(), Z.empty(), te = k(T, a))), x.template) if (Y = !0, q("template", U, x, Z), U = x, S = w(x.template) ? x.template(Z, s) : x.template, S = K(S), x.replace) {
                        if (ee = x, T = he(S) ? [] : jn(Mn(S)), i = T[0], 1 != T.length || 1 !== i.nodeType) throw tr("tplrt", "Template for directive '{0}' must have exactly one root element. {1}", C, "");
                        z(u, Z, i);
                        var se = {
                            $attr: {}
                        },
                        ae = M(i, [], se),
                        le = e.splice(ne + 1, e.length - (ne + 1));
                        B && R(ae),
                        e = e.concat(ae).concat(le),
                        F(s, se),
                        re = e.length
                    } else Z.html(S);
                    if (x.templateUrl) Y = !0,
                    q("template", U, x, Z),
                    U = x,
                    x.replace && (ee = x),
                    y = I(e.splice(ne, e.length - ne), Z, s, u, W && te, h, p, {
                        controllerDirectives: L,
                        newIsolateScopeDirective: B,
                        templateDirective: U,
                        nonTlbTranscludeDirective: V
                    }),
                    re = e.length;
                    else if (x.compile) try {
                        _ = x.compile(Z, s, te),
                        w(_) ? f(null, _, ie, oe) : _ && f(_.pre, _.post, ie, oe)
                    } catch(ue) {
                        l(ue, Q(Z))
                    }
                    x.terminal && (y.terminal = !0, N = Math.max(N, x.priority))
                }
                return y.scope = $ && $.scope === !0,
                y.transcludeOnThisElement = W,
                y.templateOnThisElement = Y,
                y.transclude = te,
                d.hasElementTranscludeDirective = J,
                y
            }
            function R(e) {
                for (var t = 0,
                n = e.length; n > t; t++) e[t] = d(e[t], {
                    $$isolateScope: !0
                })
            }
            function L(t, r, o, a, u, c, h) {
                if (r === u) return null;
                var p = null;
                if (i.hasOwnProperty(r)) for (var f, v = e.get(r + s), m = 0, g = v.length; g > m; m++) try {
                    f = v[m],
                    (a === n || a > f.priority) && -1 != f.restrict.indexOf(o) && (c && (f = d(f, {
                        $$start: c,
                        $$end: h
                    })), t.push(f), p = f)
                } catch(y) {
                    l(y)
                }
                return p
            }
            function F(e, t) {
                var n = t.$attr,
                r = e.$attr,
                i = e.$$element;
                o(e,
                function(r, i) {
                    "$" != i.charAt(0) && (t[i] && t[i] !== r && (r += ("style" === i ? ";": " ") + t[i]), e.$set(i, r, !0, n[i]))
                }),
                o(t,
                function(t, o) {
                    "class" == o ? (E(i, t), e["class"] = (e["class"] ? e["class"] + " ": "") + t) : "style" == o ? (i.attr("style", i.attr("style") + ";" + t), e.style = (e.style ? e.style + ";": "") + t) : "$" == o.charAt(0) || e.hasOwnProperty(o) || (e[o] = t, r[o] = n[o])
                })
            }
            function I(e, t, n, r, i, s, a, l) {
                var u, c, d = [],
                v = t[0],
                m = e.shift(),
                g = h({},
                m, {
                    templateUrl: null,
                    transclude: null,
                    replace: null,
                    $$originalDirective: m
                }),
                y = w(m.templateUrl) ? m.templateUrl(t, n) : m.templateUrl;
                return t.empty(),
                p.get(x.getTrustedResourceUrl(y), {
                    cache: f
                }).success(function(h) {
                    var p, f, b, $;
                    if (h = K(h), m.replace) {
                        if (b = he(h) ? [] : jn(Mn(h)), p = b[0], 1 != b.length || 1 !== p.nodeType) throw tr("tplrt", "Template for directive '{0}' must have exactly one root element. {1}", m.name, y);
                        f = {
                            $attr: {}
                        },
                        z(r, t, p);
                        var x = M(p, [], f);
                        j(m.scope) && R(x),
                        e = x.concat(e),
                        F(n, f)
                    } else p = v,
                    t.html(h);
                    for (e.unshift(g), u = N(e, p, n, i, t, m, s, a, l), o(r,
                    function(e, n) {
                        e == p && (r[n] = t[0])
                    }), c = _(t[0].childNodes, i); d.length;) {
                        var w = d.shift(),
                        C = d.shift(),
                        T = d.shift(),
                        k = d.shift(),
                        P = t[0];
                        if (C !== v) {
                            var A = C.className;
                            l.hasElementTranscludeDirective && m.replace || (P = ve(p)),
                            z(T, jn(C), P),
                            E(jn(P), A)
                        }
                        $ = u.transcludeOnThisElement ? S(w, u.transclude, k) : k,
                        u(c, w, P, r, $)
                    }
                    d = null
                }).error(function(e, t, n, r) {
                    throw tr("tpload", "Failed to load template: {0}", r.url)
                }),
                function(e, t, n, r, i) {
                    var o = i;
                    d ? (d.push(t), d.push(n), d.push(r), d.push(o)) : (u.transcludeOnThisElement && (o = S(t, u.transclude, i)), u(c, t, n, r, o))
                }
            }
            function B(e, t) {
                var n = t.priority - e.priority;
                return 0 !== n ? n: e.name !== t.name ? e.name < t.name ? -1 : 1 : e.index - t.index
            }
            function q(e, t, n, r) {
                if (t) throw tr("multidir", "Multiple directives [{0}, {1}] asking for {2} on: {3}", t.name, n.name, e, Q(r))
            }
            function U(e, t) {
                var n = r(t, !0);
                n && e.push({
                    priority: 0,
                    compile: function(e) {
                        var t = e.parent(),
                        r = t.length;
                        return r && E(e.parent(), "ng-binding"),
                        function(e, t) {
                            var i = t.parent(),
                            o = i.data("$binding") || [];
                            o.push(n),
                            i.data("$binding", o),
                            r || E(i, "ng-binding"),
                            e.$watch(n,
                            function(e) {
                                t[0].nodeValue = e
                            })
                        }
                    }
                })
            }
            function V(e, t) {
                if ("srcdoc" == t) return x.HTML;
                var n = xn(e);
                return "xlinkHref" == t || "FORM" == n && "action" == t || "IMG" != n && ("src" == t || "ngSrc" == t) ? x.RESOURCE_URL: void 0
            }
            function W(e, t, n, i) {
                var o = r(n, !0);
                if (o) {
                    if ("multiple" === i && "SELECT" === xn(e)) throw tr("selmulti", "Binding to the 'multiple' attribute is not supported. Element: {0}", Q(e));
                    t.push({
                        priority: 100,
                        compile: function() {
                            return {
                                pre: function(t, n, s) {
                                    var a = s.$$observers || (s.$$observers = {});
                                    if (c.test(i)) throw tr("nodomevents", "Interpolations for HTML DOM event attributes are disallowed.  Please use the ng- versions (such as ng-click instead of onclick) instead.");
                                    o = r(s[i], !0, V(e, i)),
                                    o && (s[i] = o(t), (a[i] || (a[i] = [])).$$inter = !0, (s.$$observers && s.$$observers[i].$$scope || t).$watch(o,
                                    function(e, t) {
                                        "class" === i && e != t ? s.$updateClass(e, t) : s.$set(i, e)
                                    }))
                                }
                            }
                        }
                    })
                }
            }
            function z(e, n, r) {
                var i, o, s = n[0],
                a = n.length,
                l = s.parentNode;
                if (e) for (i = 0, o = e.length; o > i; i++) if (e[i] == s) {
                    e[i++] = r;
                    for (var u = i,
                    c = u + a - 1,
                    h = e.length; h > u; u++, c++) h > c ? e[u] = e[c] : delete e[u];
                    e.length -= a - 1;
                    break
                }
                l && l.replaceChild(r, s);
                var p = t.createDocumentFragment();
                p.appendChild(s),
                r[jn.expando] = s[jn.expando];
                for (var d = 1,
                f = n.length; f > d; d++) {
                    var v = n[d];
                    jn(v).remove(),
                    p.appendChild(v),
                    delete n[d]
                }
                n[0] = r,
                n.length = 1
            }
            function X(e, t) {
                return h(function() {
                    return e.apply(null, arguments)
                },
                e, t)
            }
            var G = function(e, t) {
                this.$$element = e,
                this.$attr = t || {}
            };
            G.prototype = {
                $normalize: Be,
                $addClass: function(e) {
                    e && e.length > 0 && C.addClass(this.$$element, e)
                },
                $removeClass: function(e) {
                    e && e.length > 0 && C.removeClass(this.$$element, e)
                },
                $updateClass: function(e, t) {
                    var n = qe(e, t),
                    r = qe(t, e);
                    0 === n.length ? C.removeClass(this.$$element, r) : 0 === r.length ? C.addClass(this.$$element, n) : C.setClass(this.$$element, n, r)
                },
                $set: function(e, t, r, i) {
                    var s, a = _e(this.$$element[0], e);
                    a && (this.$$element.prop(e, t), i = a),
                    this[e] = t,
                    i ? this.$attr[e] = i: (i = this.$attr[e], i || (this.$attr[e] = i = Z(e, "-"))),
                    s = xn(this.$$element),
                    ("A" === s && "href" === e || "IMG" === s && "src" === e) && (this[e] = t = T(t, "src" === e)),
                    r !== !1 && (null === t || t === n ? this.$$element.removeAttr(i) : this.$$element.attr(i, t));
                    var u = this.$$observers;
                    u && o(u[e],
                    function(e) {
                        try {
                            e(t)
                        } catch(n) {
                            l(n)
                        }
                    })
                },
                $observe: function(e, t) {
                    var n = this,
                    r = n.$$observers || (n.$$observers = {}),
                    i = r[e] || (r[e] = []);
                    return i.push(t),
                    y.$evalAsync(function() {
                        i.$$inter || t(n[e])
                    }),
                    t
                }
            };
            var Y = r.startSymbol(),
            J = r.endSymbol(),
            K = "{{" == Y || "}}" == J ? v: function(e) {
                return e.replace(/\{\{/g, Y).replace(/}}/g, J)
            },
            ee = /^ngAttr[A-Z]/;
            return k
        }]
    }
    function Be(e) {
        return ue(e.replace(nr, ""))
    }
    function qe(e, t) {
        var n = "",
        r = e.split(/\s+/),
        i = t.split(/\s+/);
        e: for (var o = 0; o < r.length; o++) {
            for (var s = r[o], a = 0; a < i.length; a++) if (s == i[a]) continue e;
            n += (n.length > 0 ? " ": "") + s
        }
        return n
    }
    function Ue() {
        var e = {},
        t = /^(\S+)(\s+as\s+(\w+))?$/;
        this.register = function(t, n) {
            re(t, "controller"),
            j(t) ? h(e, t) : e[t] = n
        },
        this.$get = ["$injector", "$window",
        function(n, i) {
            return function(o, s) {
                var a, l, u, c;
                if (b(o) && (l = o.match(t), u = l[1], c = l[3], o = e.hasOwnProperty(u) ? e[u] : ie(s.$scope, u, !0) || ie(i, u, !0), ne(o, u, !0)), a = n.instantiate(o, s), c) {
                    if (!s || "object" != typeof s.$scope) throw r("$controller")("noscp", "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", u || o.name, c);
                    s.$scope[c] = a
                }
                return a
            }
        }]
    }
    function Ve() {
        this.$get = ["$window",
        function(e) {
            return jn(e.document)
        }]
    }
    function Qe() {
        this.$get = ["$log",
        function(e) {
            return function(t, n) {
                e.error.apply(e, arguments)
            }
        }]
    }
    function We(e) {
        var t, n, r, i = {};
        return e ? (o(e.split("\n"),
        function(e) {
            r = e.indexOf(":"),
            t = dn(Mn(e.substr(0, r))),
            n = Mn(e.substr(r + 1)),
            t && (i[t] ? i[t] += ", " + n: i[t] = n)
        }), i) : i
    }
    function ze(e) {
        var t = j(e) ? e: n;
        return function(n) {
            return t || (t = We(e)),
            n ? t[dn(n)] || null: t
        }
    }
    function Xe(e, t, n) {
        return w(n) ? n(e, t) : (o(n,
        function(n) {
            e = n(e, t)
        }), e)
    }
    function Ge(e) {
        return e >= 200 && 300 > e
    }
    function Ye() {
        var e = /^\s*(\[|\{[^\{])/,
        t = /[\}\]]\s*$/,
        r = /^\)\]\}',?\n/,
        i = {
            "Content-Type": "application/json;charset=utf-8"
        },
        s = this.defaults = {
            transformResponse: [function(n) {
                return b(n) && (n = n.replace(r, ""), e.test(n) && t.test(n) && (n = U(n))),
                n
            }],
            transformRequest: [function(e) {
                return ! j(e) || E(e) || _(e) ? e: q(e)
            }],
            headers: {
                common: {
                    Accept: "application/json, text/plain, */*"
                },
                post: D(i),
                put: D(i),
                patch: D(i)
            },
            xsrfCookieName: "XSRF-TOKEN",
            xsrfHeaderName: "X-XSRF-TOKEN"
        },
        l = this.interceptors = [],
        u = this.responseInterceptors = [];
        this.$get = ["$httpBackend", "$browser", "$cacheFactory", "$rootScope", "$q", "$injector",
        function(e, t, r, i, c, p) {
            function d(e) {
                function t(e) {
                    var t = h({},
                    e, {
                        data: Xe(e.data, e.headers, i.transformResponse)
                    });
                    return Ge(e.status) ? t: c.reject(t)
                }
                function r(e) {
                    function t(e) {
                        var t;
                        o(e,
                        function(n, r) {
                            w(n) && (t = n(), null != t ? e[r] = t: delete e[r])
                        })
                    }
                    var n, r, i, a = s.headers,
                    l = h({},
                    e.headers);
                    a = h({},
                    a.common, a[dn(e.method)]);
                    e: for (n in a) {
                        r = dn(n);
                        for (i in l) if (dn(i) === r) continue e;
                        l[n] = a[n]
                    }
                    return t(l),
                    l
                }
                var i = {
                    method: "get",
                    transformRequest: s.transformRequest,
                    transformResponse: s.transformResponse
                },
                a = r(e);
                h(i, e),
                i.headers = a,
                i.method = vn(i.method);
                var l = function(e) {
                    a = e.headers;
                    var n = Xe(e.data, ze(a), e.transformRequest);
                    return g(n) && o(a,
                    function(e, t) {
                        "content-type" === dn(t) && delete a[t]
                    }),
                    g(e.withCredentials) && !g(s.withCredentials) && (e.withCredentials = s.withCredentials),
                    m(e, n, a).then(t, t)
                },
                u = [l, n],
                p = c.when(i);
                for (o(C,
                function(e) { (e.request || e.requestError) && u.unshift(e.request, e.requestError),
                    (e.response || e.responseError) && u.push(e.response, e.responseError)
                }); u.length;) {
                    var d = u.shift(),
                    f = u.shift();
                    p = p.then(d, f)
                }
                return p.success = function(e) {
                    return p.then(function(t) {
                        e(t.data, t.status, t.headers, i)
                    }),
                    p
                },
                p.error = function(e) {
                    return p.then(null,
                    function(t) {
                        e(t.data, t.status, t.headers, i)
                    }),
                    p
                },
                p
            }
            function f(e) {
                o(arguments,
                function(e) {
                    d[e] = function(t, n) {
                        return d(h(n || {},
                        {
                            method: e,
                            url: t
                        }))
                    }
                })
            }
            function v(e) {
                o(arguments,
                function(e) {
                    d[e] = function(t, n, r) {
                        return d(h(r || {},
                        {
                            method: e,
                            url: t,
                            data: n
                        }))
                    }
                })
            }
            function m(r, o, a) {
                function l(e, t, n, r) {
                    p && (Ge(e) ? p.put(b, [e, t, We(n), r]) : p.remove(b)),
                    u(t, e, n, r),
                    i.$$phase || i.$apply()
                }
                function u(e, t, n, i) {
                    t = Math.max(t, 0),
                    (Ge(t) ? v.resolve: v.reject)({
                        data: e,
                        status: t,
                        headers: ze(n),
                        config: r,
                        statusText: i
                    })
                }
                function h() {
                    var e = A(d.pendingRequests, r); - 1 !== e && d.pendingRequests.splice(e, 1)
                }
                var p, f, v = c.defer(),
                m = v.promise,
                b = $(r.url, r.params);
                if (d.pendingRequests.push(r), m.then(h, h), (r.cache || s.cache) && r.cache !== !1 && "GET" == r.method && (p = j(r.cache) ? r.cache: j(s.cache) ? s.cache: x), p) if (f = p.get(b), y(f)) {
                    if (f.then) return f.then(h, h),
                    f;
                    Sn(f) ? u(f[1], f[0], D(f[2]), f[3]) : u(f, 200, {},
                    "OK")
                } else p.put(b, m);
                if (g(f)) {
                    var w = Lt(r.url) ? t.cookies()[r.xsrfCookieName || s.xsrfCookieName] : n;
                    w && (a[r.xsrfHeaderName || s.xsrfHeaderName] = w),
                    e(r.method, b, o, l, a, r.timeout, r.withCredentials, r.responseType)
                }
                return m
            }
            function $(e, t) {
                if (!t) return e;
                var n = [];
                return a(t,
                function(e, t) {
                    null === e || g(e) || (Sn(e) || (e = [e]), o(e,
                    function(e) {
                        j(e) && (e = q(e)),
                        n.push(Y(t) + "=" + Y(e))
                    }))
                }),
                n.length > 0 && (e += ( - 1 == e.indexOf("?") ? "?": "&") + n.join("&")),
                e
            }
            var x = r("$http"),
            C = [];
            return o(l,
            function(e) {
                C.unshift(b(e) ? p.get(e) : p.invoke(e))
            }),
            o(u,
            function(e, t) {
                var n = b(e) ? p.get(e) : p.invoke(e);
                C.splice(t, 0, {
                    response: function(e) {
                        return n(c.when(e))
                    },
                    responseError: function(e) {
                        return n(c.reject(e))
                    }
                })
            }),
            d.pendingRequests = [],
            f("get", "delete", "head", "jsonp"),
            v("post", "put"),
            d.defaults = s,
            d
        }]
    }
    function Je(t) {
        if (8 >= yn && (!t.match(/^(get|post|head|put|delete|options)$/i) || !e.XMLHttpRequest)) return new e.ActiveXObject("Microsoft.XMLHTTP");
        if (e.XMLHttpRequest) return new e.XMLHttpRequest;
        throw r("$httpBackend")("noxhr", "This browser does not support XMLHttpRequest.")
    }
    function Ke() {
        this.$get = ["$browser", "$window", "$document",
        function(e, t, n) {
            return Ze(e, Je, e.defer, t.angular.callbacks, n[0])
        }]
    }
    function Ze(e, t, n, r, i) {
        function s(e, t, n) {
            var o = i.createElement("script"),
            s = null;
            return o.type = "text/javascript",
            o.src = e,
            o.async = !0,
            s = function(e) {
                On(o, "load", s),
                On(o, "error", s),
                i.body.removeChild(o),
                o = null;
                var a = -1,
                l = "unknown";
                e && ("load" !== e.type || r[t].called || (e = {
                    type: "error"
                }), l = e.type, a = "error" === e.type ? 404 : 200),
                n && n(a, l)
            },
            Dn(o, "load", s),
            Dn(o, "error", s),
            8 >= yn && (o.onreadystatechange = function() {
                b(o.readyState) && /loaded|complete/.test(o.readyState) && (o.onreadystatechange = null, s({
                    type: "load"
                }))
            }),
            i.body.appendChild(o),
            s
        }
        var a = -1;
        return function(i, l, u, c, h, p, d, v) {
            function m() {
                j = a,
                $ && $(),
                x && x.abort()
            }
            function g(t, r, i, o, s) {
                C && n.cancel(C),
                $ = x = null,
                0 === r && (r = i ? 200 : "file" == Ot(l).protocol ? 404 : 0),
                r = 1223 === r ? 204 : r,
                s = s || "",
                t(r, i, o, s),
                e.$$completeOutstandingRequest(f)
            }
            var j;
            if (e.$$incOutstandingRequestCount(), l = l || e.url(), "jsonp" == dn(i)) {
                var b = "_" + (r.counter++).toString(36);
                r[b] = function(e) {
                    r[b].data = e,
                    r[b].called = !0
                };
                var $ = s(l.replace("JSON_CALLBACK", "angular.callbacks." + b), b,
                function(e, t) {
                    g(c, e, r[b].data, "", t),
                    r[b] = f
                })
            } else {
                var x = t(i);
                if (x.open(i, l, !0), o(h,
                function(e, t) {
                    y(e) && x.setRequestHeader(t, e)
                }), x.onreadystatechange = function() {
                    if (x && 4 == x.readyState) {
                        var e = null,
                        t = null,
                        n = "";
                        j !== a && (e = x.getAllResponseHeaders(), t = "response" in x ? x.response: x.responseText),
                        j === a && 10 > yn || (n = x.statusText),
                        g(c, j || x.status, t, e, n)
                    }
                },
                d && (x.withCredentials = !0), v) try {
                    x.responseType = v
                } catch(w) {
                    if ("json" !== v) throw w
                }
            }
            if (p > 0) var C = n(m, p);
            else p && p.then && p.then(m)
        }
    }
    function et() {
        var e = "{{",
        t = "}}";
        this.startSymbol = function(t) {
            return t ? (e = t, this) : e
        },
        this.endSymbol = function(e) {
            return e ? (t = e, this) : t
        },
        this.$get = ["$parse", "$exceptionHandler", "$sce",
        function(n, r, i) {
            function o(o, l, u) {
                for (var c, h, p, d, f = 0,
                v = [], m = o.length, g = !1, y = []; m > f;) - 1 != (c = o.indexOf(e, f)) && -1 != (h = o.indexOf(t, c + s)) ? (f != c && v.push(o.substring(f, c)), v.push(p = n(d = o.substring(c + s, h))), p.exp = d, f = h + a, g = !0) : (f != m && v.push(o.substring(f)), f = m);
                if ((m = v.length) || (v.push(""), m = 1), u && v.length > 1) throw rr("noconcat", "Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required.  See http://docs.angularjs.org/api/ng.$sce", o);
                return ! l || g ? (y.length = m, p = function(e) {
                    try {
                        for (var t, n = 0,
                        s = m; s > n; n++) {
                            if ("function" == typeof(t = v[n])) if (t = t(e), t = u ? i.getTrusted(u, t) : i.valueOf(t), null == t) t = "";
                            else switch (typeof t) {
                            case "string":
                                break;
                            case "number":
                                t = "" + t;
                                break;
                            default:
                                t = q(t)
                            }
                            y[n] = t
                        }
                        return y.join("")
                    } catch(a) {
                        var l = rr("interr", "Can't interpolate: {0}\n{1}", o, a.toString());
                        r(l)
                    }
                },
                p.exp = o, p.parts = v, p) : void 0
            }
            var s = e.length,
            a = t.length;
            return o.startSymbol = function() {
                return e
            },
            o.endSymbol = function() {
                return t
            },
            o
        }]
    }
    function tt() {
        this.$get = ["$rootScope", "$window", "$q",
        function(e, t, n) {
            function r(r, o, s, a) {
                var l = t.setInterval,
                u = t.clearInterval,
                c = n.defer(),
                h = c.promise,
                p = 0,
                d = y(a) && !a;
                return s = y(s) ? s: 0,
                h.then(null, null, r),
                h.$$intervalId = l(function() {
                    c.notify(p++),
                    s > 0 && p >= s && (c.resolve(p), u(h.$$intervalId), delete i[h.$$intervalId]),
                    d || e.$apply()
                },
                o),
                i[h.$$intervalId] = c,
                h
            }
            var i = {};
            return r.cancel = function(e) {
                return e && e.$$intervalId in i ? (i[e.$$intervalId].reject("canceled"), t.clearInterval(e.$$intervalId), delete i[e.$$intervalId], !0) : !1
            },
            r
        }]
    }
    function nt() {
        this.$get = function() {
            return {
                id: "en-us",
                NUMBER_FORMATS: {
                    DECIMAL_SEP: ".",
                    GROUP_SEP: ",",
                    PATTERNS: [{
                        minInt: 1,
                        minFrac: 0,
                        maxFrac: 3,
                        posPre: "",
                        posSuf: "",
                        negPre: "-",
                        negSuf: "",
                        gSize: 3,
                        lgSize: 3
                    },
                    {
                        minInt: 1,
                        minFrac: 2,
                        maxFrac: 2,
                        posPre: "¤",
                        posSuf: "",
                        negPre: "(¤",
                        negSuf: ")",
                        gSize: 3,
                        lgSize: 3
                    }],
                    CURRENCY_SYM: "$"
                },
                DATETIME_FORMATS: {
                    MONTH: "January,February,March,April,May,June,July,August,September,October,November,December".split(","),
                    SHORTMONTH: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),
                    DAY: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),
                    SHORTDAY: "Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","),
                    AMPMS: ["AM", "PM"],
                    medium: "MMM d, y h:mm:ss a",
                    "short": "M/d/yy h:mm a",
                    fullDate: "EEEE, MMMM d, y",
                    longDate: "MMMM d, y",
                    mediumDate: "MMM d, y",
                    shortDate: "M/d/yy",
                    mediumTime: "h:mm:ss a",
                    shortTime: "h:mm a"
                },
                pluralCat: function(e) {
                    return 1 === e ? "one": "other"
                }
            }
        }
    }
    function rt(e) {
        for (var t = e.split("/"), n = t.length; n--;) t[n] = G(t[n]);
        return t.join("/")
    }
    function it(e, t, n) {
        var r = Ot(e, n);
        t.$$protocol = r.protocol,
        t.$$host = r.hostname,
        t.$$port = p(r.port) || or[r.protocol] || null
    }
    function ot(e, t, n) {
        var r = "/" !== e.charAt(0);
        r && (e = "/" + e);
        var i = Ot(e, n);
        t.$$path = decodeURIComponent(r && "/" === i.pathname.charAt(0) ? i.pathname.substring(1) : i.pathname),
        t.$$search = z(i.search),
        t.$$hash = decodeURIComponent(i.hash),
        t.$$path && "/" != t.$$path.charAt(0) && (t.$$path = "/" + t.$$path)
    }
    function st(e, t) {
        return 0 === t.indexOf(e) ? t.substr(e.length) : void 0
    }
    function at(e) {
        var t = e.indexOf("#");
        return - 1 == t ? e: e.substr(0, t)
    }
    function lt(e) {
        return e.substr(0, at(e).lastIndexOf("/") + 1)
    }
    function ut(e) {
        return e.substring(0, e.indexOf("/", e.indexOf("//") + 2))
    }
    function ct(e, t) {
        this.$$html5 = !0,
        t = t || "";
        var r = lt(e);
        it(e, this, e),
        this.$$parse = function(t) {
            var n = st(r, t);
            if (!b(n)) throw sr("ipthprfx", 'Invalid url "{0}", missing path prefix "{1}".', t, r);
            ot(n, this, e),
            this.$$path || (this.$$path = "/"),
            this.$$compose()
        },
        this.$$compose = function() {
            var e = X(this.$$search),
            t = this.$$hash ? "#" + G(this.$$hash) : "";
            this.$$url = rt(this.$$path) + (e ? "?" + e: "") + t,
            this.$$absUrl = r + this.$$url.substr(1)
        },
        this.$$rewrite = function(i) {
            var o, s;
            return (o = st(e, i)) !== n ? (s = o, (o = st(t, o)) !== n ? r + (st("/", o) || o) : e + s) : (o = st(r, i)) !== n ? r + o: r == i + "/" ? r: void 0
        }
    }
    function ht(e, t) {
        var n = lt(e);
        it(e, this, e),
        this.$$parse = function(r) {
            function i(e, t, n) {
                var r, i = /^\/[A-Z]:(\/.*)/;
                return 0 === t.indexOf(n) && (t = t.replace(n, "")),
                i.exec(t) ? e: (r = i.exec(e), r ? r[1] : e)
            }
            var o = st(e, r) || st(n, r),
            s = "#" == o.charAt(0) ? st(t, o) : this.$$html5 ? o: "";
            if (!b(s)) throw sr("ihshprfx", 'Invalid url "{0}", missing hash prefix "{1}".', r, t);
            ot(s, this, e),
            this.$$path = i(this.$$path, s, e),
            this.$$compose()
        },
        this.$$compose = function() {
            var n = X(this.$$search),
            r = this.$$hash ? "#" + G(this.$$hash) : "";
            this.$$url = rt(this.$$path) + (n ? "?" + n: "") + r,
            this.$$absUrl = e + (this.$$url ? t + this.$$url: "")
        },
        this.$$rewrite = function(t) {
            return at(e) == at(t) ? t: void 0
        }
    }
    function pt(e, t) {
        this.$$html5 = !0,
        ht.apply(this, arguments);
        var n = lt(e);
        this.$$rewrite = function(r) {
            var i;
            return e == at(r) ? r: (i = st(n, r)) ? e + t + i: n === r + "/" ? n: void 0
        },
        this.$$compose = function() {
            var n = X(this.$$search),
            r = this.$$hash ? "#" + G(this.$$hash) : "";
            this.$$url = rt(this.$$path) + (n ? "?" + n: "") + r,
            this.$$absUrl = e + t + this.$$url
        }
    }
    function dt(e) {
        return function() {
            return this[e]
        }
    }
    function ft(e, t) {
        return function(n) {
            return g(n) ? this[e] : (this[e] = t(n), this.$$compose(), this)
        }
    }
    function vt() {
        var t = "",
        n = !1;
        this.hashPrefix = function(e) {
            return y(e) ? (t = e, this) : t
        },
        this.html5Mode = function(e) {
            return y(e) ? (n = e, this) : n
        },
        this.$get = ["$rootScope", "$browser", "$sniffer", "$rootElement",
        function(r, i, o, s) {
            function a(e) {
                r.$broadcast("$locationChangeSuccess", l.absUrl(), e)
            }
            var l, u, c, h = i.baseHref(),
            p = i.url();
            n ? (c = ut(p) + (h || "/"), u = o.history ? ct: pt) : (c = at(p), u = ht),
            l = new u(c, "#" + t),
            l.$$parse(l.$$rewrite(p)),
            s.on("click",
            function(n) {
                if (!n.ctrlKey && !n.metaKey && 2 != n.which) {
                    for (var o = jn(n.target);
                    "a" !== dn(o[0].nodeName);) if (o[0] === s[0] || !(o = o.parent())[0]) return;
                    var a = o.prop("href");
                    if (j(a) && "[object SVGAnimatedString]" === a.toString() && (a = Ot(a.animVal).href), u === pt) {
                        var h = o.attr("href") || o.attr("xlink:href");
                        if (h.indexOf("://") < 0) {
                            var p = "#" + t;
                            if ("/" == h[0]) a = c + p + h;
                            else if ("#" == h[0]) a = c + p + (l.path() || "/") + h;
                            else {
                                for (var d = l.path().split("/"), f = h.split("/"), v = 0; v < f.length; v++)"." != f[v] && (".." == f[v] ? d.pop() : f[v].length && d.push(f[v]));
                                a = c + p + d.join("/")
                            }
                        }
                    }
                    var m = l.$$rewrite(a);
                    a && !o.attr("target") && m && !n.isDefaultPrevented() && (n.preventDefault(), m != i.url() && (l.$$parse(m), r.$apply(), e.angular["ff-684208-preventDefault"] = !0))
                }
            }),
            l.absUrl() != p && i.url(l.absUrl(), !0),
            i.onUrlChange(function(e) {
                l.absUrl() != e && (r.$evalAsync(function() {
                    var t = l.absUrl();
                    l.$$parse(e),
                    r.$broadcast("$locationChangeStart", e, t).defaultPrevented ? (l.$$parse(t), i.url(t)) : a(t)
                }), r.$$phase || r.$digest())
            });
            var d = 0;
            return r.$watch(function() {
                var e = i.url(),
                t = l.$$replace;
                return d && e == l.absUrl() || (d++, r.$evalAsync(function() {
                    r.$broadcast("$locationChangeStart", l.absUrl(), e).defaultPrevented ? l.$$parse(e) : (i.url(l.absUrl(), t), a(e))
                })),
                l.$$replace = !1,
                d
            }),
            l
        }]
    }
    function mt() {
        var e = !0,
        t = this;
        this.debugEnabled = function(t) {
            return y(t) ? (e = t, this) : e
        },
        this.$get = ["$window",
        function(n) {
            function r(e) {
                return e instanceof Error && (e.stack ? e = e.message && -1 === e.stack.indexOf(e.message) ? "Error: " + e.message + "\n" + e.stack: e.stack: e.sourceURL && (e = e.message + "\n" + e.sourceURL + ":" + e.line)),
                e
            }
            function i(e) {
                var t = n.console || {},
                i = t[e] || t.log || f,
                s = !1;
                try {
                    s = !!i.apply
                } catch(a) {}
                return s ?
                function() {
                    var e = [];
                    return o(arguments,
                    function(t) {
                        e.push(r(t))
                    }),
                    i.apply(t, e)
                }: function(e, t) {
                    i(e, null == t ? "": t)
                }
            }
            return {
                log: i("log"),
                info: i("info"),
                warn: i("warn"),
                error: i("error"),
                debug: function() {
                    var n = i("debug");
                    return function() {
                        e && n.apply(t, arguments)
                    }
                } ()
            }
        }]
    }
    function gt(e, t) {
        if ("__defineGetter__" === e || "__defineSetter__" === e || "__lookupGetter__" === e || "__lookupSetter__" === e || "__proto__" === e) throw lr("isecfld", "Attempting to access a disallowed field in Angular expressions! Expression: {0}", t);
        return e
    }
    function yt(e, t) {
        if (e) {
            if (e.constructor === e) throw lr("isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", t);
            if (e.document && e.location && e.alert && e.setInterval) throw lr("isecwindow", "Referencing the Window in Angular expressions is disallowed! Expression: {0}", t);
            if (e.children && (e.nodeName || e.prop && e.attr && e.find)) throw lr("isecdom", "Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}", t);
            if (e === Object) throw lr("isecobj", "Referencing Object in Angular expressions is disallowed! Expression: {0}", t)
        }
        return e
    }
    function jt(e, t) {
        if (e) {
            if (e.constructor === e) throw lr("isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", t);
            if (e === cr || e === hr || pr && e === pr) throw lr("isecff", "Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}", t)
        }
    }
    function bt(e, t, r, i, o) {
        o = o || {};
        for (var s, a = t.split("."), l = 0; a.length > 1; l++) {
            s = gt(a.shift(), i);
            var u = e[s];
            u || (u = {},
            e[s] = u),
            e = u,
            e.then && o.unwrapPromises && (ar(i), "$$v" in e || !
            function(e) {
                e.then(function(t) {
                    e.$$v = t
                })
            } (e), e.$$v === n && (e.$$v = {}), e = e.$$v)
        }
        return s = gt(a.shift(), i),
        yt(e, i),
        yt(e[s], i),
        e[s] = r,
        r
    }
    function $t(e, t, r, i, o, s, a) {
        return gt(e, s),
        gt(t, s),
        gt(r, s),
        gt(i, s),
        gt(o, s),
        a.unwrapPromises ?
        function(a, l) {
            var u, c = l && l.hasOwnProperty(e) ? l: a;
            return null == c ? c: (c = c[e], c && c.then && (ar(s), "$$v" in c || (u = c, u.$$v = n, u.then(function(e) {
                u.$$v = e
            })), c = c.$$v), t ? null == c ? n: (c = c[t], c && c.then && (ar(s), "$$v" in c || (u = c, u.$$v = n, u.then(function(e) {
                u.$$v = e
            })), c = c.$$v), r ? null == c ? n: (c = c[r], c && c.then && (ar(s), "$$v" in c || (u = c, u.$$v = n, u.then(function(e) {
                u.$$v = e
            })), c = c.$$v), i ? null == c ? n: (c = c[i], c && c.then && (ar(s), "$$v" in c || (u = c, u.$$v = n, u.then(function(e) {
                u.$$v = e
            })), c = c.$$v), o ? null == c ? n: (c = c[o], c && c.then && (ar(s), "$$v" in c || (u = c, u.$$v = n, u.then(function(e) {
                u.$$v = e
            })), c = c.$$v), c) : c) : c) : c) : c)
        }: function(s, a) {
            var l = a && a.hasOwnProperty(e) ? a: s;
            return null == l ? l: (l = l[e], t ? null == l ? n: (l = l[t], r ? null == l ? n: (l = l[r], i ? null == l ? n: (l = l[i], o ? null == l ? n: l = l[o] : l) : l) : l) : l)
        }
    }
    function xt(e, t, r) {
        if (gr.hasOwnProperty(e)) return gr[e];
        var i, s = e.split("."),
        a = s.length;
        if (t.csp) i = 6 > a ? $t(s[0], s[1], s[2], s[3], s[4], r, t) : function(e, i) {
            var o, l = 0;
            do o = $t(s[l++], s[l++], s[l++], s[l++], s[l++], r, t)(e, i),
            i = n,
            e = o;
            while (a > l);
            return o
        };
        else {
            var l = "var p;\n";
            o(s,
            function(e, n) {
                gt(e, r),
                l += "if(s == null) return undefined;\ns=" + (n ? "s": '((k&&k.hasOwnProperty("' + e + '"))?k:s)') + '["' + e + '"];\n' + (t.unwrapPromises ? 'if (s && s.then) {\n pw("' + r.replace(/(["\r\n])/g, "\\$1") + '");\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=v;});\n}\n s=s.$$v\n}\n': "")
            }),
            l += "return s;";
            var u = new Function("s", "k", "pw", l);
            u.toString = m(l),
            i = t.unwrapPromises ?
            function(e, t) {
                return u(e, t, ar)
            }: u
        }
        return "hasOwnProperty" !== e && (gr[e] = i),
        i
    }
    function wt() {
        var e = {},
        t = {
            csp: !1,
            unwrapPromises: !1,
            logPromiseWarnings: !0
        };
        this.unwrapPromises = function(e) {
            return y(e) ? (t.unwrapPromises = !!e, this) : t.unwrapPromises
        },
        this.logPromiseWarnings = function(e) {
            return y(e) ? (t.logPromiseWarnings = e, this) : t.logPromiseWarnings
        },
        this.$get = ["$filter", "$sniffer", "$log",
        function(n, r, i) {
            return t.csp = r.csp,
            ar = function(e) {
                t.logPromiseWarnings && !ur.hasOwnProperty(e) && (ur[e] = !0, i.warn("[$parse] Promise found in the expression `" + e + "`. Automatic unwrapping of promises in Angular expressions is deprecated."))
            },
            function(r) {
                var i;
                switch (typeof r) {
                case "string":
                    if (e.hasOwnProperty(r)) return e[r];
                    var o = new vr(t),
                    s = new mr(o, n, t);
                    return i = s.parse(r),
                    "hasOwnProperty" !== r && (e[r] = i),
                    i;
                case "function":
                    return r;
                default:
                    return f
                }
            }
        }]
    }
    function Ct() {
        this.$get = ["$rootScope", "$exceptionHandler",
        function(e, t) {
            return Tt(function(t) {
                e.$evalAsync(t)
            },
            t)
        }]
    }
    function Tt(e, t) {
        function r(e) {
            return e
        }
        function i(e) {
            return u(e)
        }
        function s(e) {
            var t = a(),
            n = 0,
            r = Sn(e) ? [] : {};
            return o(e,
            function(e, i) {
                n++,
                l(e).then(function(e) {
                    r.hasOwnProperty(i) || (r[i] = e, --n || t.resolve(r))
                },
                function(e) {
                    r.hasOwnProperty(i) || t.reject(e)
                })
            }),
            0 === n && t.resolve(r),
            t.promise
        }
        var a = function() {
            var o, s, u = [];
            return s = {
                resolve: function(t) {
                    if (u) {
                        var r = u;
                        u = n,
                        o = l(t),
                        r.length && e(function() {
                            for (var e, t = 0,
                            n = r.length; n > t; t++) e = r[t],
                            o.then(e[0], e[1], e[2])
                        })
                    }
                },
                reject: function(e) {
                    s.resolve(c(e))
                },
                notify: function(t) {
                    if (u) {
                        var n = u;
                        u.length && e(function() {
                            for (var e, r = 0,
                            i = n.length; i > r; r++) e = n[r],
                            e[2](t)
                        })
                    }
                },
                promise: {
                    then: function(e, n, s) {
                        var l = a(),
                        c = function(n) {
                            try {
                                l.resolve((w(e) ? e: r)(n));
                            } catch(i) {
                                l.reject(i),
                                t(i)
                            }
                        },
                        h = function(e) {
                            try {
                                l.resolve((w(n) ? n: i)(e))
                            } catch(r) {
                                l.reject(r),
                                t(r)
                            }
                        },
                        p = function(e) {
                            try {
                                l.notify((w(s) ? s: r)(e))
                            } catch(n) {
                                t(n)
                            }
                        };
                        return u ? u.push([c, h, p]) : o.then(c, h, p),
                        l.promise
                    },
                    "catch": function(e) {
                        return this.then(null, e)
                    },
                    "finally": function(e) {
                        function t(e, t) {
                            var n = a();
                            return t ? n.resolve(e) : n.reject(e),
                            n.promise
                        }
                        function n(n, i) {
                            var o = null;
                            try {
                                o = (e || r)()
                            } catch(s) {
                                return t(s, !1)
                            }
                            return o && w(o.then) ? o.then(function() {
                                return t(n, i)
                            },
                            function(e) {
                                return t(e, !1)
                            }) : t(n, i)
                        }
                        return this.then(function(e) {
                            return n(e, !0)
                        },
                        function(e) {
                            return n(e, !1)
                        })
                    }
                }
            }
        },
        l = function(t) {
            return t && w(t.then) ? t: {
                then: function(n) {
                    var r = a();
                    return e(function() {
                        r.resolve(n(t))
                    }),
                    r.promise
                }
            }
        },
        u = function(e) {
            var t = a();
            return t.reject(e),
            t.promise
        },
        c = function(n) {
            return {
                then: function(r, o) {
                    var s = a();
                    return e(function() {
                        try {
                            s.resolve((w(o) ? o: i)(n))
                        } catch(e) {
                            s.reject(e),
                            t(e)
                        }
                    }),
                    s.promise
                }
            }
        },
        h = function(n, o, s, c) {
            var h, p = a(),
            d = function(e) {
                try {
                    return (w(o) ? o: r)(e)
                } catch(n) {
                    return t(n),
                    u(n)
                }
            },
            f = function(e) {
                try {
                    return (w(s) ? s: i)(e)
                } catch(n) {
                    return t(n),
                    u(n)
                }
            },
            v = function(e) {
                try {
                    return (w(c) ? c: r)(e)
                } catch(n) {
                    t(n)
                }
            };
            return e(function() {
                l(n).then(function(e) {
                    h || (h = !0, p.resolve(l(e).then(d, f, v)))
                },
                function(e) {
                    h || (h = !0, p.resolve(f(e)))
                },
                function(e) {
                    h || p.notify(v(e))
                })
            }),
            p.promise
        };
        return {
            defer: a,
            reject: u,
            when: h,
            all: s
        }
    }
    function kt() {
        this.$get = ["$window", "$timeout",
        function(e, t) {
            var n = e.requestAnimationFrame || e.webkitRequestAnimationFrame || e.mozRequestAnimationFrame,
            r = e.cancelAnimationFrame || e.webkitCancelAnimationFrame || e.mozCancelAnimationFrame || e.webkitCancelRequestAnimationFrame,
            i = !!n,
            o = i ?
            function(e) {
                var t = n(e);
                return function() {
                    r(t)
                }
            }: function(e) {
                var n = t(e, 16.66, !1);
                return function() {
                    t.cancel(n)
                }
            };
            return o.supported = i,
            o
        }]
    }
    function Et() {
        var e = 10,
        t = r("$rootScope"),
        n = null;
        this.digestTtl = function(t) {
            return arguments.length && (e = t),
            e
        },
        this.$get = ["$injector", "$exceptionHandler", "$parse", "$browser",
        function(r, s, a, l) {
            function c() {
                this.$id = u(),
                this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null,
                this["this"] = this.$root = this,
                this.$$destroyed = !1,
                this.$$asyncQueue = [],
                this.$$postDigestQueue = [],
                this.$$listeners = {},
                this.$$listenerCount = {},
                this.$$isolateBindings = {}
            }
            function h(e) {
                if (g.$$phase) throw t("inprog", "{0} already in progress", g.$$phase);
                g.$$phase = e
            }
            function p() {
                g.$$phase = null
            }
            function d(e, t) {
                var n = a(e);
                return ne(n, t),
                n
            }
            function v(e, t, n) {
                do e.$$listenerCount[n] -= t,
                0 === e.$$listenerCount[n] && delete e.$$listenerCount[n];
                while (e = e.$parent)
            }
            function m() {}
            c.prototype = {
                constructor: c,
                $new: function(e) {
                    var t;
                    return e ? (t = new c, t.$root = this.$root, t.$$asyncQueue = this.$$asyncQueue, t.$$postDigestQueue = this.$$postDigestQueue) : (this.$$childScopeClass || (this.$$childScopeClass = function() {
                        this.$$watchers = this.$$nextSibling = this.$$childHead = this.$$childTail = null,
                        this.$$listeners = {},
                        this.$$listenerCount = {},
                        this.$id = u(),
                        this.$$childScopeClass = null
                    },
                    this.$$childScopeClass.prototype = this), t = new this.$$childScopeClass),
                    t["this"] = t,
                    t.$parent = this,
                    t.$$prevSibling = this.$$childTail,
                    this.$$childHead ? (this.$$childTail.$$nextSibling = t, this.$$childTail = t) : this.$$childHead = this.$$childTail = t,
                    t
                },
                $watch: function(e, t, r) {
                    var i = this,
                    o = d(e, "watch"),
                    s = i.$$watchers,
                    a = {
                        fn: t,
                        last: m,
                        get: o,
                        exp: e,
                        eq: !!r
                    };
                    if (n = null, !w(t)) {
                        var l = d(t || f, "listener");
                        a.fn = function(e, t, n) {
                            l(n)
                        }
                    }
                    if ("string" == typeof e && o.constant) {
                        var u = a.fn;
                        a.fn = function(e, t, n) {
                            u.call(this, e, t, n),
                            N(s, a)
                        }
                    }
                    return s || (s = i.$$watchers = []),
                    s.unshift(a),
                    function() {
                        N(s, a),
                        n = null
                    }
                },
                $watchCollection: function(e, t) {
                    function n() {
                        o = p(u);
                        var e, t;
                        if (j(o)) if (i(o)) {
                            s !== d && (s = d, m = s.length = 0, h++),
                            e = o.length,
                            m !== e && (h++, s.length = m = e);
                            for (var n = 0; e > n; n++) {
                                var r = s[n] !== s[n] && o[n] !== o[n];
                                r || s[n] === o[n] || (h++, s[n] = o[n])
                            }
                        } else {
                            s !== f && (s = f = {},
                            m = 0, h++),
                            e = 0;
                            for (t in o) o.hasOwnProperty(t) && (e++, s.hasOwnProperty(t) ? s[t] !== o[t] && (h++, s[t] = o[t]) : (m++, s[t] = o[t], h++));
                            if (m > e) {
                                h++;
                                for (t in s) s.hasOwnProperty(t) && !o.hasOwnProperty(t) && (m--, delete s[t])
                            }
                        } else s !== o && (s = o, h++);
                        return h
                    }
                    function r() {
                        if (v ? (v = !1, t(o, o, u)) : t(o, l, u), c) if (j(o)) if (i(o)) {
                            l = new Array(o.length);
                            for (var e = 0; e < o.length; e++) l[e] = o[e]
                        } else {
                            l = {};
                            for (var n in o) fn.call(o, n) && (l[n] = o[n])
                        } else l = o
                    }
                    var o, s, l, u = this,
                    c = t.length > 1,
                    h = 0,
                    p = a(e),
                    d = [],
                    f = {},
                    v = !0,
                    m = 0;
                    return this.$watch(n, r)
                },
                $digest: function() {
                    var r, i, o, a, l, u, c, d, f, v, g, y = this.$$asyncQueue,
                    j = this.$$postDigestQueue,
                    b = e,
                    $ = this,
                    x = [];
                    h("$digest"),
                    n = null;
                    do {
                        for (u = !1, d = $; y.length;) {
                            try {
                                g = y.shift(),
                                g.scope.$eval(g.expression)
                            } catch(C) {
                                p(),
                                s(C)
                            }
                            n = null
                        }
                        e: do {
                            if (a = d.$$watchers) for (l = a.length; l--;) try {
                                if (r = a[l]) if ((i = r.get(d)) === (o = r.last) || (r.eq ? O(i, o) : "number" == typeof i && "number" == typeof o && isNaN(i) && isNaN(o))) {
                                    if (r === n) {
                                        u = !1;
                                        break e
                                    }
                                } else u = !0,
                                n = r,
                                r.last = r.eq ? R(i, null) : i,
                                r.fn(i, o === m ? i: o, d),
                                5 > b && (f = 4 - b, x[f] || (x[f] = []), v = w(r.exp) ? "fn: " + (r.exp.name || r.exp.toString()) : r.exp, v += "; newVal: " + q(i) + "; oldVal: " + q(o), x[f].push(v))
                            } catch(C) {
                                p(),
                                s(C)
                            }
                            if (! (c = d.$$childHead || d !== $ && d.$$nextSibling)) for (; d !== $ && !(c = d.$$nextSibling);) d = d.$parent
                        } while ( d = c );
                        if ((u || y.length) && !b--) throw p(), t("infdig", "{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}", e, q(x))
                    } while ( u || y . length );
                    for (p(); j.length;) try {
                        j.shift()()
                    } catch(C) {
                        s(C)
                    }
                },
                $destroy: function() {
                    if (!this.$$destroyed) {
                        var e = this.$parent;
                        this.$broadcast("$destroy"),
                        this.$$destroyed = !0,
                        this !== g && (o(this.$$listenerCount, I(null, v, this)), e.$$childHead == this && (e.$$childHead = this.$$nextSibling), e.$$childTail == this && (e.$$childTail = this.$$prevSibling), this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling), this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling), this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = this.$root = null, this.$$listeners = {},
                        this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = [], this.$destroy = this.$digest = this.$apply = f, this.$on = this.$watch = function() {
                            return f
                        })
                    }
                },
                $eval: function(e, t) {
                    return a(e)(this, t)
                },
                $evalAsync: function(e) {
                    g.$$phase || g.$$asyncQueue.length || l.defer(function() {
                        g.$$asyncQueue.length && g.$digest()
                    }),
                    this.$$asyncQueue.push({
                        scope: this,
                        expression: e
                    })
                },
                $$postDigest: function(e) {
                    this.$$postDigestQueue.push(e)
                },
                $apply: function(e) {
                    try {
                        return h("$apply"),
                        this.$eval(e)
                    } catch(t) {
                        s(t)
                    } finally {
                        p();
                        try {
                            g.$digest()
                        } catch(t) {
                            throw s(t),
                            t
                        }
                    }
                },
                $on: function(e, t) {
                    var n = this.$$listeners[e];
                    n || (this.$$listeners[e] = n = []),
                    n.push(t);
                    var r = this;
                    do r.$$listenerCount[e] || (r.$$listenerCount[e] = 0),
                    r.$$listenerCount[e]++;
                    while (r = r.$parent);
                    var i = this;
                    return function() {
                        n[A(n, t)] = null,
                        v(i, 1, e)
                    }
                },
                $emit: function(e, t) {
                    var n, r, i, o = [],
                    a = this,
                    l = !1,
                    u = {
                        name: e,
                        targetScope: a,
                        stopPropagation: function() {
                            l = !0
                        },
                        preventDefault: function() {
                            u.defaultPrevented = !0
                        },
                        defaultPrevented: !1
                    },
                    c = F([u], arguments, 1);
                    do {
                        for (n = a.$$listeners[e] || o, u.currentScope = a, r = 0, i = n.length; i > r; r++) if (n[r]) try {
                            n[r].apply(null, c)
                        } catch(h) {
                            s(h)
                        } else n.splice(r, 1), r--, i--;
                        if (l) return u;
                        a = a.$parent
                    } while ( a );
                    return u
                },
                $broadcast: function(e, t) {
                    for (var n, r, i, o = this,
                    a = o,
                    l = o,
                    u = {
                        name: e,
                        targetScope: o,
                        preventDefault: function() {
                            u.defaultPrevented = !0
                        },
                        defaultPrevented: !1
                    },
                    c = F([u], arguments, 1); a = l;) {
                        for (u.currentScope = a, n = a.$$listeners[e] || [], r = 0, i = n.length; i > r; r++) if (n[r]) try {
                            n[r].apply(null, c)
                        } catch(h) {
                            s(h)
                        } else n.splice(r, 1),
                        r--,
                        i--;
                        if (! (l = a.$$listenerCount[e] && a.$$childHead || a !== o && a.$$nextSibling)) for (; a !== o && !(l = a.$$nextSibling);) a = a.$parent
                    }
                    return u
                }
            };
            var g = new c;
            return g
        }]
    }
    function _t() {
        var e = /^\s*(https?|ftp|mailto|tel|file):/,
        t = /^\s*(https?|ftp|file):|data:image\//;
        this.aHrefSanitizationWhitelist = function(t) {
            return y(t) ? (e = t, this) : e
        },
        this.imgSrcSanitizationWhitelist = function(e) {
            return y(e) ? (t = e, this) : t
        },
        this.$get = function() {
            return function(n, r) {
                var i, o = r ? t: e;
                return yn && !(yn >= 8) || (i = Ot(n).href, "" === i || i.match(o)) ? n: "unsafe:" + i
            }
        }
    }
    function St(e) {
        return e.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08")
    }
    function Mt(e) {
        if ("self" === e) return e;
        if (b(e)) {
            if (e.indexOf("***") > -1) throw yr("iwcard", "Illegal sequence *** in string matcher.  String: {0}", e);
            return e = St(e).replace("\\*\\*", ".*").replace("\\*", "[^:/.?&;]*"),
            new RegExp("^" + e + "$")
        }
        if (C(e)) return new RegExp("^" + e.source + "$");
        throw yr("imatcher", 'Matchers may only be "self", string patterns or RegExp objects')
    }
    function Pt(e) {
        var t = [];
        return y(e) && o(e,
        function(e) {
            t.push(Mt(e))
        }),
        t
    }
    function At() {
        this.SCE_CONTEXTS = jr;
        var e = ["self"],
        t = [];
        this.resourceUrlWhitelist = function(t) {
            return arguments.length && (e = Pt(t)),
            e
        },
        this.resourceUrlBlacklist = function(e) {
            return arguments.length && (t = Pt(e)),
            t
        },
        this.$get = ["$injector",
        function(r) {
            function i(e, t) {
                return "self" === e ? Lt(t) : !!e.exec(t.href)
            }
            function o(n) {
                var r, o, s = Ot(n.toString()),
                a = !1;
                for (r = 0, o = e.length; o > r; r++) if (i(e[r], s)) {
                    a = !0;
                    break
                }
                if (a) for (r = 0, o = t.length; o > r; r++) if (i(t[r], s)) {
                    a = !1;
                    break
                }
                return a
            }
            function s(e) {
                var t = function(e) {
                    this.$$unwrapTrustedValue = function() {
                        return e
                    }
                };
                return e && (t.prototype = new e),
                t.prototype.valueOf = function() {
                    return this.$$unwrapTrustedValue()
                },
                t.prototype.toString = function() {
                    return this.$$unwrapTrustedValue().toString()
                },
                t
            }
            function a(e, t) {
                var r = p.hasOwnProperty(e) ? p[e] : null;
                if (!r) throw yr("icontext", "Attempted to trust a value in invalid context. Context: {0}; Value: {1}", e, t);
                if (null === t || t === n || "" === t) return t;
                if ("string" != typeof t) throw yr("itype", "Attempted to trust a non-string value in a content requiring a string: Context: {0}", e);
                return new r(t)
            }
            function l(e) {
                return e instanceof h ? e.$$unwrapTrustedValue() : e
            }
            function u(e, t) {
                if (null === t || t === n || "" === t) return t;
                var r = p.hasOwnProperty(e) ? p[e] : null;
                if (r && t instanceof r) return t.$$unwrapTrustedValue();
                if (e === jr.RESOURCE_URL) {
                    if (o(t)) return t;
                    throw yr("insecurl", "Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}", t.toString())
                }
                if (e === jr.HTML) return c(t);
                throw yr("unsafe", "Attempting to use an unsafe value in a safe context.")
            }
            var c = function(e) {
                throw yr("unsafe", "Attempting to use an unsafe value in a safe context.")
            };
            r.has("$sanitize") && (c = r.get("$sanitize"));
            var h = s(),
            p = {};
            return p[jr.HTML] = s(h),
            p[jr.CSS] = s(h),
            p[jr.URL] = s(h),
            p[jr.JS] = s(h),
            p[jr.RESOURCE_URL] = s(p[jr.URL]),
            {
                trustAs: a,
                getTrusted: u,
                valueOf: l
            }
        }]
    }
    function Nt() {
        var e = !0;
        this.enabled = function(t) {
            return arguments.length && (e = !!t),
            e
        },
        this.$get = ["$parse", "$sniffer", "$sceDelegate",
        function(t, n, r) {
            if (e && n.msie && n.msieDocumentMode < 8) throw yr("iequirks", "Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks mode.  You can fix this by adding the text <!doctype html> to the top of your HTML document.  See http://docs.angularjs.org/api/ng.$sce for more information.");
            var i = D(jr);
            i.isEnabled = function() {
                return e
            },
            i.trustAs = r.trustAs,
            i.getTrusted = r.getTrusted,
            i.valueOf = r.valueOf,
            e || (i.trustAs = i.getTrusted = function(e, t) {
                return t
            },
            i.valueOf = v),
            i.parseAs = function(e, n) {
                var r = t(n);
                return r.literal && r.constant ? r: function(t, n) {
                    return i.getTrusted(e, r(t, n))
                }
            };
            var s = i.parseAs,
            a = i.getTrusted,
            l = i.trustAs;
            return o(jr,
            function(e, t) {
                var n = dn(t);
                i[ue("parse_as_" + n)] = function(t) {
                    return s(e, t)
                },
                i[ue("get_trusted_" + n)] = function(t) {
                    return a(e, t)
                },
                i[ue("trust_as_" + n)] = function(t) {
                    return l(e, t)
                }
            }),
            i
        }]
    }
    function Rt() {
        this.$get = ["$window", "$document",
        function(e, t) {
            var n, r, i = {},
            o = p((/android (\d+)/.exec(dn((e.navigator || {}).userAgent)) || [])[1]),
            s = /Boxee/i.test((e.navigator || {}).userAgent),
            a = t[0] || {},
            l = a.documentMode,
            u = /^(Moz|webkit|O|ms)(?=[A-Z])/,
            c = a.body && a.body.style,
            h = !1,
            d = !1;
            if (c) {
                for (var f in c) if (r = u.exec(f)) {
                    n = r[0],
                    n = n.substr(0, 1).toUpperCase() + n.substr(1);
                    break
                }
                n || (n = "WebkitOpacity" in c && "webkit"),
                h = !!("transition" in c || n + "Transition" in c),
                d = !!("animation" in c || n + "Animation" in c),
                !o || h && d || (h = b(a.body.style.webkitTransition), d = b(a.body.style.webkitAnimation))
            }
            return {
                history: !(!e.history || !e.history.pushState || 4 > o || s),
                hashchange: "onhashchange" in e && (!l || l > 7),
                hasEvent: function(e) {
                    if ("input" == e && 9 == yn) return ! 1;
                    if (g(i[e])) {
                        var t = a.createElement("div");
                        i[e] = "on" + e in t
                    }
                    return i[e]
                },
                csp: L(),
                vendorPrefix: n,
                transitions: h,
                animations: d,
                android: o,
                msie: yn,
                msieDocumentMode: l
            }
        }]
    }
    function Dt() {
        this.$get = ["$rootScope", "$browser", "$q", "$exceptionHandler",
        function(e, t, n, r) {
            function i(i, s, a) {
                var l, u = n.defer(),
                c = u.promise,
                h = y(a) && !a;
                return l = t.defer(function() {
                    try {
                        u.resolve(i())
                    } catch(t) {
                        u.reject(t),
                        r(t)
                    } finally {
                        delete o[c.$$timeoutId]
                    }
                    h || e.$apply()
                },
                s),
                c.$$timeoutId = l,
                o[l] = u,
                c
            }
            var o = {};
            return i.cancel = function(e) {
                return e && e.$$timeoutId in o ? (o[e.$$timeoutId].reject("canceled"), delete o[e.$$timeoutId], t.defer.cancel(e.$$timeoutId)) : !1
            },
            i
        }]
    }
    function Ot(e, t) {
        var n = e;
        return yn && (br.setAttribute("href", n), n = br.href),
        br.setAttribute("href", n),
        {
            href: br.href,
            protocol: br.protocol ? br.protocol.replace(/:$/, "") : "",
            host: br.host,
            search: br.search ? br.search.replace(/^\?/, "") : "",
            hash: br.hash ? br.hash.replace(/^#/, "") : "",
            hostname: br.hostname,
            port: br.port,
            pathname: "/" === br.pathname.charAt(0) ? br.pathname: "/" + br.pathname
        }
    }
    function Lt(e) {
        var t = b(e) ? Ot(e) : e;
        return t.protocol === $r.protocol && t.host === $r.host
    }
    function Ft() {
        this.$get = m(e)
    }
    function Ht(e) {
        function t(r, i) {
            if (j(r)) {
                var s = {};
                return o(r,
                function(e, n) {
                    s[n] = t(n, e)
                }),
                s
            }
            return e.factory(r + n, i)
        }
        var n = "Filter";
        this.register = t,
        this.$get = ["$injector",
        function(e) {
            return function(t) {
                return e.get(t + n)
            }
        }],
        t("currency", Bt),
        t("date", Gt),
        t("filter", It),
        t("json", Yt),
        t("limitTo", Jt),
        t("lowercase", kr),
        t("number", qt),
        t("orderBy", Kt),
        t("uppercase", Er)
    }
    function It() {
        return function(e, t, n) {
            if (!Sn(e)) return e;
            var r = typeof n,
            i = [];
            i.check = function(e) {
                for (var t = 0; t < i.length; t++) if (!i[t](e)) return ! 1;
                return ! 0
            },
            "function" !== r && (n = "boolean" === r && n ?
            function(e, t) {
                return En.equals(e, t)
            }: function(e, t) {
                if (e && t && "object" == typeof e && "object" == typeof t) {
                    for (var r in e) if ("$" !== r.charAt(0) && fn.call(e, r) && n(e[r], t[r])) return ! 0;
                    return ! 1
                }
                return t = ("" + t).toLowerCase(),
                ("" + e).toLowerCase().indexOf(t) > -1
            });
            var o = function(e, t) {
                if ("string" == typeof t && "!" === t.charAt(0)) return ! o(e, t.substr(1));
                switch (typeof e) {
                case "boolean":
                case "number":
                case "string":
                    return n(e, t);
                case "object":
                    switch (typeof t) {
                    case "object":
                        return n(e, t);
                    default:
                        for (var r in e) if ("$" !== r.charAt(0) && o(e[r], t)) return ! 0
                    }
                    return ! 1;
                case "array":
                    for (var i = 0; i < e.length; i++) if (o(e[i], t)) return ! 0;
                    return ! 1;
                default:
                    return ! 1
                }
            };
            switch (typeof t) {
            case "boolean":
            case "number":
            case "string":
                t = {
                    $: t
                };
            case "object":
                for (var s in t) !
                function(e) {
                    "undefined" != typeof t[e] && i.push(function(n) {
                        return o("$" == e ? n: n && n[e], t[e])
                    })
                } (s);
                break;
            case "function":
                i.push(t);
                break;
            default:
                return e
            }
            for (var a = [], l = 0; l < e.length; l++) {
                var u = e[l];
                i.check(u) && a.push(u)
            }
            return a
        }
    }
    function Bt(e) {
        var t = e.NUMBER_FORMATS;
        return function(e, n) {
            return g(n) && (n = t.CURRENCY_SYM),
            Ut(e, t.PATTERNS[1], t.GROUP_SEP, t.DECIMAL_SEP, 2).replace(/\u00A4/g, n)
        }
    }
    function qt(e) {
        var t = e.NUMBER_FORMATS;
        return function(e, n) {
            return Ut(e, t.PATTERNS[0], t.GROUP_SEP, t.DECIMAL_SEP, n)
        }
    }
    function Ut(e, t, n, r, i) {
        if (null == e || !isFinite(e) || j(e)) return "";
        var o = 0 > e;
        e = Math.abs(e);
        var s = e + "",
        a = "",
        l = [],
        u = !1;
        if ( - 1 !== s.indexOf("e")) {
            var c = s.match(/([\d\.]+)e(-?)(\d+)/);
            c && "-" == c[2] && c[3] > i + 1 ? (s = "0", e = 0) : (a = s, u = !0)
        }
        if (u) i > 0 && e > -1 && 1 > e && (a = e.toFixed(i));
        else {
            var h = (s.split(xr)[1] || "").length;
            g(i) && (i = Math.min(Math.max(t.minFrac, h), t.maxFrac)),
            e = +(Math.round( + (e.toString() + "e" + i)).toString() + "e" + -i);
            var p = ("" + e).split(xr),
            d = p[0];
            p = p[1] || "";
            var f, v = 0,
            m = t.lgSize,
            y = t.gSize;
            if (d.length >= m + y) for (v = d.length - m, f = 0; v > f; f++)(v - f) % y === 0 && 0 !== f && (a += n),
            a += d.charAt(f);
            for (f = v; f < d.length; f++)(d.length - f) % m === 0 && 0 !== f && (a += n),
            a += d.charAt(f);
            for (; p.length < i;) p += "0";
            i && "0" !== i && (a += r + p.substr(0, i))
        }
        return l.push(o ? t.negPre: t.posPre),
        l.push(a),
        l.push(o ? t.negSuf: t.posSuf),
        l.join("")
    }
    function Vt(e, t, n) {
        var r = "";
        for (0 > e && (r = "-", e = -e), e = "" + e; e.length < t;) e = "0" + e;
        return n && (e = e.substr(e.length - t)),
        r + e
    }
    function Qt(e, t, n, r) {
        return n = n || 0,
        function(i) {
            var o = i["get" + e]();
            return (n > 0 || o > -n) && (o += n),
            0 === o && -12 == n && (o = 12),
            Vt(o, t, r)
        }
    }
    function Wt(e, t) {
        return function(n, r) {
            var i = n["get" + e](),
            o = vn(t ? "SHORT" + e: e);
            return r[o][i]
        }
    }
    function zt(e) {
        var t = -1 * e.getTimezoneOffset(),
        n = t >= 0 ? "+": "";
        return n += Vt(Math[t > 0 ? "floor": "ceil"](t / 60), 2) + Vt(Math.abs(t % 60), 2)
    }
    function Xt(e, t) {
        return e.getHours() < 12 ? t.AMPMS[0] : t.AMPMS[1]
    }
    function Gt(e) {
        function t(e) {
            var t;
            if (t = e.match(n)) {
                var r = new Date(0),
                i = 0,
                o = 0,
                s = t[8] ? r.setUTCFullYear: r.setFullYear,
                a = t[8] ? r.setUTCHours: r.setHours;
                t[9] && (i = p(t[9] + t[10]), o = p(t[9] + t[11])),
                s.call(r, p(t[1]), p(t[2]) - 1, p(t[3]));
                var l = p(t[4] || 0) - i,
                u = p(t[5] || 0) - o,
                c = p(t[6] || 0),
                h = Math.round(1e3 * parseFloat("0." + (t[7] || 0)));
                return a.call(r, l, u, c, h),
                r
            }
            return e
        }
        var n = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
        return function(n, r) {
            var i, s, a = "",
            l = [];
            if (r = r || "mediumDate", r = e.DATETIME_FORMATS[r] || r, b(n) && (n = Tr.test(n) ? p(n) : t(n)), $(n) && (n = new Date(n)), !x(n)) return n;
            for (; r;) s = Cr.exec(r),
            s ? (l = F(l, s, 1), r = l.pop()) : (l.push(r), r = null);
            return o(l,
            function(t) {
                i = wr[t],
                a += i ? i(n, e.DATETIME_FORMATS) : t.replace(/(^'|'$)/g, "").replace(/''/g, "'")
            }),
            a
        }
    }
    function Yt() {
        return function(e) {
            return q(e, !0)
        }
    }
    function Jt() {
        return function(e, t) {
            if (!Sn(e) && !b(e)) return e;
            if (t = Math.abs(Number(t)) === 1 / 0 ? Number(t) : p(t), b(e)) return t ? t >= 0 ? e.slice(0, t) : e.slice(t, e.length) : "";
            var n, r, i = [];
            for (t > e.length ? t = e.length: t < -e.length && (t = -e.length), t > 0 ? (n = 0, r = t) : (n = e.length + t, r = e.length); r > n; n++) i.push(e[n]);
            return i
        }
    }
    function Kt(e) {
        return function(t, n, r) {
            function i(e, t) {
                for (var r = 0; r < n.length; r++) {
                    var i = n[r](e, t);
                    if (0 !== i) return i
                }
                return 0
            }
            function o(e, t) {
                return V(t) ?
                function(t, n) {
                    return e(n, t)
                }: e
            }
            function s(e, t) {
                var n = typeof e,
                r = typeof t;
                return n == r ? ("string" == n && (e = e.toLowerCase(), t = t.toLowerCase()), e === t ? 0 : t > e ? -1 : 1) : r > n ? -1 : 1
            }
            if (!Sn(t)) return t;
            if (!n) return t;
            n = Sn(n) ? n: [n],
            n = M(n,
            function(t) {
                var n = !1,
                r = t || v;
                if (b(t) && ("+" != t.charAt(0) && "-" != t.charAt(0) || (n = "-" == t.charAt(0), t = t.substring(1)), r = e(t), r.constant)) {
                    var i = r();
                    return o(function(e, t) {
                        return s(e[i], t[i])
                    },
                    n)
                }
                return o(function(e, t) {
                    return s(r(e), r(t))
                },
                n)
            });
            for (var a = [], l = 0; l < t.length; l++) a.push(t[l]);
            return a.sort(o(i, r))
        }
    }
    function Zt(e) {
        return w(e) && (e = {
            link: e
        }),
        e.restrict = e.restrict || "AC",
        m(e)
    }
    function en(e, t, n, r) {
        function i(t, n) {
            n = n ? "-" + Z(n, "-") : "",
            r.removeClass(e, (t ? Br: Ir) + n),
            r.addClass(e, (t ? Ir: Br) + n)
        }
        var s = this,
        a = e.parent().controller("form") || Mr,
        l = 0,
        u = s.$error = {},
        c = [];
        s.$name = t.name || t.ngForm,
        s.$dirty = !1,
        s.$pristine = !0,
        s.$valid = !0,
        s.$invalid = !1,
        a.$addControl(s),
        e.addClass(qr),
        i(!0),
        s.$addControl = function(e) {
            re(e.$name, "input"),
            c.push(e),
            e.$name && (s[e.$name] = e)
        },
        s.$removeControl = function(e) {
            e.$name && s[e.$name] === e && delete s[e.$name],
            o(u,
            function(t, n) {
                s.$setValidity(n, !0, e)
            }),
            N(c, e)
        },
        s.$setValidity = function(e, t, n) {
            var r = u[e];
            if (t) r && (N(r, n), r.length || (l--, l || (i(t), s.$valid = !0, s.$invalid = !1), u[e] = !1, i(!0, e), a.$setValidity(e, !0, s)));
            else {
                if (l || i(t), r) {
                    if (P(r, n)) return
                } else u[e] = r = [],
                l++,
                i(!1, e),
                a.$setValidity(e, !1, s);
                r.push(n),
                s.$valid = !1,
                s.$invalid = !0
            }
        },
        s.$setDirty = function() {
            r.removeClass(e, qr),
            r.addClass(e, Ur),
            s.$dirty = !0,
            s.$pristine = !1,
            a.$setDirty()
        },
        s.$setPristine = function() {
            r.removeClass(e, Ur),
            r.addClass(e, qr),
            s.$dirty = !1,
            s.$pristine = !0,
            o(c,
            function(e) {
                e.$setPristine()
            })
        }
    }
    function tn(e, t, r, i) {
        return e.$setValidity(t, r),
        r ? i: n
    }
    function nn(e, t) {
        var n, r;
        if (t) for (n = 0; n < t.length; ++n) if (r = t[n], e[r]) return ! 0;
        return ! 1
    }
    function rn(e, t, n, r, i) {
        if (j(i)) {
            e.$$hasNativeValidators = !0;
            var o = function(o) {
                return e.$error[t] || nn(i, r) || !nn(i, n) ? o: void e.$setValidity(t, !1)
            };
            e.$parsers.push(o)
        }
    }
    function on(e, t, n, i, o, s) {
        var a = t.prop(pn),
        l = t[0].placeholder,
        u = {};
        if (i.$$validityState = a, !o.android) {
            var c = !1;
            t.on("compositionstart",
            function(e) {
                c = !0
            }),
            t.on("compositionend",
            function() {
                c = !1,
                h()
            })
        }
        var h = function(r) {
            if (!c) {
                var o = t.val();
                if (yn && "input" === (r || u).type && t[0].placeholder !== l) return void(l = t[0].placeholder);
                V(n.ngTrim || "T") && (o = Mn(o));
                var s = a && i.$$hasNativeValidators; (i.$viewValue !== o || "" === o && s) && (e.$$phase ? i.$setViewValue(o) : e.$apply(function() {
                    i.$setViewValue(o)
                }))
            }
        };
        if (o.hasEvent("input")) t.on("input", h);
        else {
            var d, f = function() {
                d || (d = s.defer(function() {
                    h(),
                    d = null
                }))
            };
            t.on("keydown",
            function(e) {
                var t = e.keyCode;
                91 === t || t > 15 && 19 > t || t >= 37 && 40 >= t || f()
            }),
            o.hasEvent("paste") && t.on("paste cut", f)
        }
        t.on("change", h),
        i.$render = function() {
            t.val(i.$isEmpty(i.$viewValue) ? "": i.$viewValue)
        };
        var v, m, g = n.ngPattern;
        if (g) {
            var y = function(e, t) {
                return tn(i, "pattern", i.$isEmpty(t) || e.test(t), t)
            };
            m = g.match(/^\/(.*)\/([gim]*)$/),
            m ? (g = new RegExp(m[1], m[2]), v = function(e) {
                return y(g, e)
            }) : v = function(n) {
                var i = e.$eval(g);
                if (!i || !i.test) throw r("ngPattern")("noregexp", "Expected {0} to be a RegExp but was {1}. Element: {2}", g, i, Q(t));
                return y(i, n)
            },
            i.$formatters.push(v),
            i.$parsers.push(v)
        }
        if (n.ngMinlength) {
            var j = p(n.ngMinlength),
            b = function(e) {
                return tn(i, "minlength", i.$isEmpty(e) || e.length >= j, e)
            };
            i.$parsers.push(b),
            i.$formatters.push(b)
        }
        if (n.ngMaxlength) {
            var $ = p(n.ngMaxlength),
            x = function(e) {
                return tn(i, "maxlength", i.$isEmpty(e) || e.length <= $, e)
            };
            i.$parsers.push(x),
            i.$formatters.push(x)
        }
    }
    function sn(e, t, r, i, o, s) {
        if (on(e, t, r, i, o, s), i.$parsers.push(function(e) {
            var t = i.$isEmpty(e);
            return t || Or.test(e) ? (i.$setValidity("number", !0), "" === e ? null: t ? e: parseFloat(e)) : (i.$setValidity("number", !1), n)
        }), rn(i, "number", Fr, null, i.$$validityState), i.$formatters.push(function(e) {
            return i.$isEmpty(e) ? "": "" + e
        }), r.min) {
            var a = function(e) {
                var t = parseFloat(r.min);
                return tn(i, "min", i.$isEmpty(e) || e >= t, e)
            };
            i.$parsers.push(a),
            i.$formatters.push(a)
        }
        if (r.max) {
            var l = function(e) {
                var t = parseFloat(r.max);
                return tn(i, "max", i.$isEmpty(e) || t >= e, e)
            };
            i.$parsers.push(l),
            i.$formatters.push(l)
        }
        i.$formatters.push(function(e) {
            return tn(i, "number", i.$isEmpty(e) || $(e), e)
        })
    }
    function an(e, t, n, r, i, o) {
        on(e, t, n, r, i, o);
        var s = function(e) {
            return tn(r, "url", r.$isEmpty(e) || Rr.test(e), e)
        };
        r.$formatters.push(s),
        r.$parsers.push(s)
    }
    function ln(e, t, n, r, i, o) {
        on(e, t, n, r, i, o);
        var s = function(e) {
            return tn(r, "email", r.$isEmpty(e) || Dr.test(e), e)
        };
        r.$formatters.push(s),
        r.$parsers.push(s)
    }
    function un(e, t, n, r) {
        g(n.name) && t.attr("name", u()),
        t.on("click",
        function() {
            t[0].checked && e.$apply(function() {
                r.$setViewValue(n.value)
            })
        }),
        r.$render = function() {
            var e = n.value;
            t[0].checked = e == r.$viewValue
        },
        n.$observe("value", r.$render)
    }
    function cn(e, t, n, r) {
        var i = n.ngTrueValue,
        o = n.ngFalseValue;
        b(i) || (i = !0),
        b(o) || (o = !1),
        t.on("click",
        function() {
            e.$apply(function() {
                r.$setViewValue(t[0].checked)
            })
        }),
        r.$render = function() {
            t[0].checked = r.$viewValue
        },
        r.$isEmpty = function(e) {
            return e !== i
        },
        r.$formatters.push(function(e) {
            return e === i
        }),
        r.$parsers.push(function(e) {
            return e ? i: o
        })
    }
    function hn(e, t) {
        return e = "ngClass" + e,
        ["$animate",
        function(n) {
            function r(e, t) {
                var n = [];
                e: for (var r = 0; r < e.length; r++) {
                    for (var i = e[r], o = 0; o < t.length; o++) if (i == t[o]) continue e;
                    n.push(i)
                }
                return n
            }
            function i(e) {
                if (Sn(e)) return e;
                if (b(e)) return e.split(" ");
                if (j(e)) {
                    var t = [];
                    return o(e,
                    function(e, n) {
                        e && (t = t.concat(n.split(" ")))
                    }),
                    t
                }
                return e
            }
            return {
                restrict: "AC",
                link: function(s, a, l) {
                    function u(e) {
                        var t = h(e, 1);
                        l.$addClass(t)
                    }
                    function c(e) {
                        var t = h(e, -1);
                        l.$removeClass(t)
                    }
                    function h(e, t) {
                        var n = a.data("$classCounts") || {},
                        r = [];
                        return o(e,
                        function(e) { (t > 0 || n[e]) && (n[e] = (n[e] || 0) + t, n[e] === +(t > 0) && r.push(e))
                        }),
                        a.data("$classCounts", n),
                        r.join(" ")
                    }
                    function p(e, t) {
                        var i = r(t, e),
                        o = r(e, t);
                        o = h(o, -1),
                        i = h(i, 1),
                        0 === i.length ? n.removeClass(a, o) : 0 === o.length ? n.addClass(a, i) : n.setClass(a, i, o)
                    }
                    function d(e) {
                        if (t === !0 || s.$index % 2 === t) {
                            var n = i(e || []);
                            if (f) {
                                if (!O(e, f)) {
                                    var r = i(f);
                                    p(r, n)
                                }
                            } else u(n)
                        }
                        f = D(e)
                    }
                    var f;
                    s.$watch(l[e], d, !0),
                    l.$observe("class",
                    function(t) {
                        d(s.$eval(l[e]))
                    }),
                    "ngClass" !== e && s.$watch("$index",
                    function(n, r) {
                        var o = 1 & n;
                        if (o !== (1 & r)) {
                            var a = i(s.$eval(l[e]));
                            o === t ? u(a) : c(a)
                        }
                    })
                }
            }
        }]
    }
    var pn = "validity",
    dn = function(e) {
        return b(e) ? e.toLowerCase() : e
    },
    fn = Object.prototype.hasOwnProperty,
    vn = function(e) {
        return b(e) ? e.toUpperCase() : e
    },
    mn = function(e) {
        return b(e) ? e.replace(/[A-Z]/g,
        function(e) {
            return String.fromCharCode(32 | e.charCodeAt(0))
        }) : e
    },
    gn = function(e) {
        return b(e) ? e.replace(/[a-z]/g,
        function(e) {
            return String.fromCharCode( - 33 & e.charCodeAt(0))
        }) : e
    };
    "i" !== "I".toLowerCase() && (dn = mn, vn = gn);
    var yn, jn, bn, $n, xn, wn = [].slice,
    Cn = [].push,
    Tn = Object.prototype.toString,
    kn = r("ng"),
    En = e.angular || (e.angular = {}),
    _n = ["0", "0", "0"];
    yn = p((/msie (\d+)/.exec(dn(navigator.userAgent)) || [])[1]),
    isNaN(yn) && (yn = p((/trident\/.*; rv:(\d+)/.exec(dn(navigator.userAgent)) || [])[1])),
    f.$inject = [],
    v.$inject = [];
    var Sn = function() {
        return w(Array.isArray) ? Array.isArray: function(e) {
            return "[object Array]" === Tn.call(e)
        }
    } (),
    Mn = function() {
        return String.prototype.trim ?
        function(e) {
            return b(e) ? e.trim() : e
        }: function(e) {
            return b(e) ? e.replace(/^\s\s*/, "").replace(/\s\s*$/, "") : e
        }
    } ();
    xn = 9 > yn ?
    function(e) {
        return e = e.nodeName ? e: e[0],
        e.scopeName && "HTML" != e.scopeName ? vn(e.scopeName + ":" + e.nodeName) : e.nodeName
    }: function(e) {
        return e.nodeName ? e.nodeName: e[0].nodeName
    };
    var Pn = /[A-Z]/g,
    An = {
        full: "1.2.20",
        major: 1,
        minor: 2,
        dot: 20,
        codeName: "accidental-beautification"
    };
    fe.expando = "ng339";
    var Nn = fe.cache = {},
    Rn = 1,
    Dn = e.document.addEventListener ?
    function(e, t, n) {
        e.addEventListener(t, n, !1)
    }: function(e, t, n) {
        e.attachEvent("on" + t, n)
    },
    On = e.document.removeEventListener ?
    function(e, t, n) {
        e.removeEventListener(t, n, !1)
    }: function(e, t, n) {
        e.detachEvent("on" + t, n)
    },
    Ln = (fe._data = function(e) {
        return this.cache[e[this.expando]] || {}
    },
    /([\:\-\_]+(.))/g),
    Fn = /^moz([A-Z])/,
    Hn = r("jqLite"),
    In = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
    Bn = /<|&#?\w+;/,
    qn = /<([\w:]+)/,
    Un = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
    Vn = {
        option: [1, '<select multiple="multiple">', "</select>"],
        thead: [1, "<table>", "</table>"],
        col: [2, "<table><colgroup>", "</colgroup></table>"],
        tr: [2, "<table><tbody>", "</tbody></table>"],
        td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
        _default: [0, "", ""]
    };
    Vn.optgroup = Vn.option,
    Vn.tbody = Vn.tfoot = Vn.colgroup = Vn.caption = Vn.thead,
    Vn.th = Vn.td;
    var Qn = fe.prototype = {
        ready: function(n) {
            function r() {
                i || (i = !0, n())
            }
            var i = !1;
            "complete" === t.readyState ? setTimeout(r) : (this.on("DOMContentLoaded", r), fe(e).on("load", r))
        },
        toString: function() {
            var e = [];
            return o(this,
            function(t) {
                e.push("" + t)
            }),
            "[" + e.join(", ") + "]"
        },
        eq: function(e) {
            return jn(e >= 0 ? this[e] : this[this.length + e])
        },
        length: 0,
        push: Cn,
        sort: [].sort,
        splice: [].splice
    },
    Wn = {};
    o("multiple,selected,checked,disabled,readOnly,required,open".split(","),
    function(e) {
        Wn[dn(e)] = e
    });
    var zn = {};
    o("input,select,option,textarea,button,form,details".split(","),
    function(e) {
        zn[vn(e)] = !0
    }),
    o({
        data: be,
        inheritedData: ke,
        scope: function(e) {
            return jn(e).data("$scope") || ke(e.parentNode || e, ["$isolateScope", "$scope"])
        },
        isolateScope: function(e) {
            return jn(e).data("$isolateScope") || jn(e).data("$isolateScopeNoTemplate")
        },
        controller: Te,
        injector: function(e) {
            return ke(e, "$injector")
        },
        removeAttr: function(e, t) {
            e.removeAttribute(t)
        },
        hasClass: $e,
        css: function(e, t, r) {
            if (t = ue(t), !y(r)) {
                var i;
                return 8 >= yn && (i = e.currentStyle && e.currentStyle[t], "" === i && (i = "auto")),
                i = i || e.style[t],
                8 >= yn && (i = "" === i ? n: i),
                i
            }
            e.style[t] = r
        },
        attr: function(e, t, r) {
            var i = dn(t);
            if (Wn[i]) {
                if (!y(r)) return e[t] || (e.attributes.getNamedItem(t) || f).specified ? i: n;
                r ? (e[t] = !0, e.setAttribute(t, i)) : (e[t] = !1, e.removeAttribute(i))
            } else if (y(r)) e.setAttribute(t, r);
            else if (e.getAttribute) {
                var o = e.getAttribute(t, 2);
                return null === o ? n: o
            }
        },
        prop: function(e, t, n) {
            return y(n) ? void(e[t] = n) : e[t]
        },
        text: function() {
            function e(e, n) {
                var r = t[e.nodeType];
                return g(n) ? r ? e[r] : "": void(e[r] = n)
            }
            var t = [];
            return 9 > yn ? (t[1] = "innerText", t[3] = "nodeValue") : t[1] = t[3] = "textContent",
            e.$dv = "",
            e
        } (),
        val: function(e, t) {
            if (g(t)) {
                if ("SELECT" === xn(e) && e.multiple) {
                    var n = [];
                    return o(e.options,
                    function(e) {
                        e.selected && n.push(e.value || e.text)
                    }),
                    0 === n.length ? null: n
                }
                return e.value
            }
            e.value = t
        },
        html: function(e, t) {
            if (g(t)) return e.innerHTML;
            for (var n = 0,
            r = e.childNodes; n < r.length; n++) me(r[n]);
            e.innerHTML = t
        },
        empty: Ee
    },
    function(e, t) {
        fe.prototype[t] = function(t, r) {
            var i, o, s = this.length;
            if (e !== Ee && (2 == e.length && e !== $e && e !== Te ? t: r) === n) {
                if (j(t)) {
                    for (i = 0; s > i; i++) if (e === be) e(this[i], t);
                    else for (o in t) e(this[i], o, t[o]);
                    return this
                }
                for (var a = e.$dv,
                l = a === n ? Math.min(s, 1) : s, u = 0; l > u; u++) {
                    var c = e(this[u], t, r);
                    a = a ? a + c: c
                }
                return a
            }
            for (i = 0; s > i; i++) e(this[i], t, r);
            return this
        }
    }),
    o({
        removeData: ye,
        dealoc: me,
        on: function ki(e, n, r, i) {
            if (y(i)) throw Hn("onargs", "jqLite#on() does not support the `selector` or `eventData` parameters");
            var s = je(e, "events"),
            a = je(e, "handle");
            s || je(e, "events", s = {}),
            a || je(e, "handle", a = Se(e, s)),
            o(n.split(" "),
            function(n) {
                var i = s[n];
                if (!i) {
                    if ("mouseenter" == n || "mouseleave" == n) {
                        var o = t.body.contains || t.body.compareDocumentPosition ?
                        function(e, t) {
                            var n = 9 === e.nodeType ? e.documentElement: e,
                            r = t && t.parentNode;
                            return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)))
                        }: function(e, t) {
                            if (t) for (; t = t.parentNode;) if (t === e) return ! 0;
                            return ! 1
                        };
                        s[n] = [];
                        var l = {
                            mouseleave: "mouseout",
                            mouseenter: "mouseover"
                        };
                        ki(e, l[n],
                        function(e) {
                            var t = this,
                            r = e.relatedTarget;
                            r && (r === t || o(t, r)) || a(e, n)
                        })
                    } else Dn(e, n, a),
                    s[n] = [];
                    i = s[n]
                }
                i.push(r)
            })
        },
        off: ge,
        one: function(e, t, n) {
            e = jn(e),
            e.on(t,
            function r() {
                e.off(t, n),
                e.off(t, r)
            }),
            e.on(t, n)
        },
        replaceWith: function(e, t) {
            var n, r = e.parentNode;
            me(e),
            o(new fe(t),
            function(t) {
                n ? r.insertBefore(t, n.nextSibling) : r.replaceChild(t, e),
                n = t
            })
        },
        children: function(e) {
            var t = [];
            return o(e.childNodes,
            function(e) {
                1 === e.nodeType && t.push(e)
            }),
            t
        },
        contents: function(e) {
            return e.contentDocument || e.childNodes || []
        },
        append: function(e, t) {
            o(new fe(t),
            function(t) {
                1 !== e.nodeType && 11 !== e.nodeType || e.appendChild(t)
            })
        },
        prepend: function(e, t) {
            if (1 === e.nodeType) {
                var n = e.firstChild;
                o(new fe(t),
                function(t) {
                    e.insertBefore(t, n)
                })
            }
        },
        wrap: function(e, t) {
            t = jn(t)[0];
            var n = e.parentNode;
            n && n.replaceChild(t, e),
            t.appendChild(e)
        },
        remove: function(e) {
            me(e);
            var t = e.parentNode;
            t && t.removeChild(e)
        },
        after: function(e, t) {
            var n = e,
            r = e.parentNode;
            o(new fe(t),
            function(e) {
                r.insertBefore(e, n.nextSibling),
                n = e
            })
        },
        addClass: we,
        removeClass: xe,
        toggleClass: function(e, t, n) {
            t && o(t.split(" "),
            function(t) {
                var r = n;
                g(r) && (r = !$e(e, t)),
                (r ? we: xe)(e, t)
            })
        },
        parent: function(e) {
            var t = e.parentNode;
            return t && 11 !== t.nodeType ? t: null
        },
        next: function(e) {
            if (e.nextElementSibling) return e.nextElementSibling;
            for (var t = e.nextSibling; null != t && 1 !== t.nodeType;) t = t.nextSibling;
            return t
        },
        find: function(e, t) {
            return e.getElementsByTagName ? e.getElementsByTagName(t) : []
        },
        clone: ve,
        triggerHandler: function(e, t, n) {
            var r = (je(e, "events") || {})[t];
            n = n || [];
            var i = [{
                preventDefault: f,
                stopPropagation: f
            }];
            o(r,
            function(t) {
                t.apply(e, i.concat(n))
            })
        }
    },
    function(e, t) {
        fe.prototype[t] = function(t, n, r) {
            for (var i, o = 0; o < this.length; o++) g(i) ? (i = e(this[o], t, n, r), y(i) && (i = jn(i))) : Ce(i, e(this[o], t, n, r));
            return y(i) ? i: this
        },
        fe.prototype.bind = fe.prototype.on,
        fe.prototype.unbind = fe.prototype.off
    }),
    Pe.prototype = {
        put: function(e, t) {
            this[Me(e, this.nextUid)] = t
        },
        get: function(e) {
            return this[Me(e, this.nextUid)]
        },
        remove: function(e) {
            var t = this[e = Me(e, this.nextUid)];
            return delete this[e],
            t
        }
    };
    var Xn = /^function\s*[^\(]*\(\s*([^\)]*)\)/m,
    Gn = /,/,
    Yn = /^\s*(_?)(\S+?)\1\s*$/,
    Jn = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,
    Kn = r("$injector"),
    Zn = r("$animate"),
    er = ["$provide",
    function(e) {
        this.$$selectors = {},
        this.register = function(t, n) {
            var r = t + "-animation";
            if (t && "." != t.charAt(0)) throw Zn("notcsel", "Expecting class selector starting with '.' got '{0}'.", t);
            this.$$selectors[t.substr(1)] = r,
            e.factory(r, n)
        },
        this.classNameFilter = function(e) {
            return 1 === arguments.length && (this.$$classNameFilter = e instanceof RegExp ? e: null),
            this.$$classNameFilter
        },
        this.$get = ["$timeout", "$$asyncCallback",
        function(e, t) {
            function n(e) {
                e && t(e)
            }
            return {
                enter: function(e, t, r, i) {
                    r ? r.after(e) : (t && t[0] || (t = r.parent()), t.append(e)),
                    n(i)
                },
                leave: function(e, t) {
                    e.remove(),
                    n(t)
                },
                move: function(e, t, n, r) {
                    this.enter(e, t, n, r)
                },
                addClass: function(e, t, r) {
                    t = b(t) ? t: Sn(t) ? t.join(" ") : "",
                    o(e,
                    function(e) {
                        we(e, t)
                    }),
                    n(r)
                },
                removeClass: function(e, t, r) {
                    t = b(t) ? t: Sn(t) ? t.join(" ") : "",
                    o(e,
                    function(e) {
                        xe(e, t)
                    }),
                    n(r)
                },
                setClass: function(e, t, r, i) {
                    o(e,
                    function(e) {
                        we(e, t),
                        xe(e, r)
                    }),
                    n(i)
                },
                enabled: f
            }
        }]
    }],
    tr = r("$compile");
    Ie.$inject = ["$provide", "$$sanitizeUriProvider"];
    var nr = /^(x[\:\-_]|data[\:\-_])/i,
    rr = r("$interpolate"),
    ir = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
    or = {
        http: 80,
        https: 443,
        ftp: 21
    },
    sr = r("$location");
    pt.prototype = ht.prototype = ct.prototype = {
        $$html5: !1,
        $$replace: !1,
        absUrl: dt("$$absUrl"),
        url: function(e, t) {
            if (g(e)) return this.$$url;
            var n = ir.exec(e);
            return n[1] && this.path(decodeURIComponent(n[1])),
            (n[2] || n[1]) && this.search(n[3] || ""),
            this.hash(n[5] || "", t),
            this
        },
        protocol: dt("$$protocol"),
        host: dt("$$host"),
        port: dt("$$port"),
        path: ft("$$path",
        function(e) {
            return "/" == e.charAt(0) ? e: "/" + e
        }),
        search: function(e, t) {
            switch (arguments.length) {
            case 0:
                return this.$$search;
            case 1:
                if (b(e)) this.$$search = z(e);
                else {
                    if (!j(e)) throw sr("isrcharg", "The first argument of the `$location#search()` call must be a string or an object.");
                    o(e,
                    function(t, n) {
                        null == t && delete e[n]
                    }),
                    this.$$search = e
                }
                break;
            default:
                g(t) || null === t ? delete this.$$search[e] : this.$$search[e] = t
            }
            return this.$$compose(),
            this
        },
        hash: ft("$$hash", v),
        replace: function() {
            return this.$$replace = !0,
            this
        }
    };
    var ar, lr = r("$parse"),
    ur = {},
    cr = Function.prototype.call,
    hr = Function.prototype.apply,
    pr = Function.prototype.bind,
    dr = {
        "null": function() {
            return null
        },
        "true": function() {
            return ! 0
        },
        "false": function() {
            return ! 1
        },
        undefined: f,
        "+": function(e, t, r, i) {
            return r = r(e, t),
            i = i(e, t),
            y(r) ? y(i) ? r + i: r: y(i) ? i: n
        },
        "-": function(e, t, n, r) {
            return n = n(e, t),
            r = r(e, t),
            (y(n) ? n: 0) - (y(r) ? r: 0)
        },
        "*": function(e, t, n, r) {
            return n(e, t) * r(e, t)
        },
        "/": function(e, t, n, r) {
            return n(e, t) / r(e, t)
        },
        "%": function(e, t, n, r) {
            return n(e, t) % r(e, t)
        },
        "^": function(e, t, n, r) {
            return n(e, t) ^ r(e, t)
        },
        "=": f,
        "===": function(e, t, n, r) {
            return n(e, t) === r(e, t)
        },
        "!==": function(e, t, n, r) {
            return n(e, t) !== r(e, t)
        },
        "==": function(e, t, n, r) {
            return n(e, t) == r(e, t)
        },
        "!=": function(e, t, n, r) {
            return n(e, t) != r(e, t)
        },
        "<": function(e, t, n, r) {
            return n(e, t) < r(e, t)
        },
        ">": function(e, t, n, r) {
            return n(e, t) > r(e, t)
        },
        "<=": function(e, t, n, r) {
            return n(e, t) <= r(e, t)
        },
        ">=": function(e, t, n, r) {
            return n(e, t) >= r(e, t)
        },
        "&&": function(e, t, n, r) {
            return n(e, t) && r(e, t)
        },
        "||": function(e, t, n, r) {
            return n(e, t) || r(e, t)
        },
        "&": function(e, t, n, r) {
            return n(e, t) & r(e, t)
        },
        "|": function(e, t, n, r) {
            return r(e, t)(e, t, n(e, t))
        },
        "!": function(e, t, n) {
            return ! n(e, t)
        }
    },
    fr = {
        n: "\n",
        f: "\f",
        r: "\r",
        t: "	",
        v: "\x0B",
        "'": "'",
        '"': '"'
    },
    vr = function(e) {
        this.options = e
    };
    vr.prototype = {
        constructor: vr,
        lex: function(e) {
            for (this.text = e, this.index = 0, this.ch = n, this.lastCh = ":", this.tokens = []; this.index < this.text.length;) {
                if (this.ch = this.text.charAt(this.index), this.is("\"'")) this.readString(this.ch);
                else if (this.isNumber(this.ch) || this.is(".") && this.isNumber(this.peek())) this.readNumber();
                else if (this.isIdent(this.ch)) this.readIdent();
                else if (this.is("(){}[].,;:?")) this.tokens.push({
                    index: this.index,
                    text: this.ch
                }),
                this.index++;
                else {
                    if (this.isWhitespace(this.ch)) {
                        this.index++;
                        continue
                    }
                    var t = this.ch + this.peek(),
                    r = t + this.peek(2),
                    i = dr[this.ch],
                    o = dr[t],
                    s = dr[r];
                    s ? (this.tokens.push({
                        index: this.index,
                        text: r,
                        fn: s
                    }), this.index += 3) : o ? (this.tokens.push({
                        index: this.index,
                        text: t,
                        fn: o
                    }), this.index += 2) : i ? (this.tokens.push({
                        index: this.index,
                        text: this.ch,
                        fn: i
                    }), this.index += 1) : this.throwError("Unexpected next character ", this.index, this.index + 1)
                }
                this.lastCh = this.ch
            }
            return this.tokens
        },
        is: function(e) {
            return - 1 !== e.indexOf(this.ch)
        },
        was: function(e) {
            return - 1 !== e.indexOf(this.lastCh)
        },
        peek: function(e) {
            var t = e || 1;
            return this.index + t < this.text.length ? this.text.charAt(this.index + t) : !1
        },
        isNumber: function(e) {
            return e >= "0" && "9" >= e
        },
        isWhitespace: function(e) {
            return " " === e || "\r" === e || "	" === e || "\n" === e || "\x0B" === e || " " === e
        },
        isIdent: function(e) {
            return e >= "a" && "z" >= e || e >= "A" && "Z" >= e || "_" === e || "$" === e
        },
        isExpOperator: function(e) {
            return "-" === e || "+" === e || this.isNumber(e)
        },
        throwError: function(e, t, n) {
            n = n || this.index;
            var r = y(t) ? "s " + t + "-" + this.index + " [" + this.text.substring(t, n) + "]": " " + n;
            throw lr("lexerr", "Lexer Error: {0} at column{1} in expression [{2}].", e, r, this.text)
        },
        readNumber: function() {
            for (var e = "",
            t = this.index; this.index < this.text.length;) {
                var n = dn(this.text.charAt(this.index));
                if ("." == n || this.isNumber(n)) e += n;
                else {
                    var r = this.peek();
                    if ("e" == n && this.isExpOperator(r)) e += n;
                    else if (this.isExpOperator(n) && r && this.isNumber(r) && "e" == e.charAt(e.length - 1)) e += n;
                    else {
                        if (!this.isExpOperator(n) || r && this.isNumber(r) || "e" != e.charAt(e.length - 1)) break;
                        this.throwError("Invalid exponent")
                    }
                }
                this.index++
            }
            e = 1 * e,
            this.tokens.push({
                index: t,
                text: e,
                literal: !0,
                constant: !0,
                fn: function() {
                    return e
                }
            })
        },
        readIdent: function() {
            for (var e, t, n, r, i = this,
            o = "",
            s = this.index; this.index < this.text.length && (r = this.text.charAt(this.index), "." === r || this.isIdent(r) || this.isNumber(r));)"." === r && (e = this.index),
            o += r,
            this.index++;
            if (e) for (t = this.index; t < this.text.length;) {
                if (r = this.text.charAt(t), "(" === r) {
                    n = o.substr(e - s + 1),
                    o = o.substr(0, e - s),
                    this.index = t;
                    break
                }
                if (!this.isWhitespace(r)) break;
                t++
            }
            var a = {
                index: s,
                text: o
            };
            if (dr.hasOwnProperty(o)) a.fn = dr[o],
            a.literal = !0,
            a.constant = !0;
            else {
                var l = xt(o, this.options, this.text);
                a.fn = h(function(e, t) {
                    return l(e, t)
                },
                {
                    assign: function(e, t) {
                        return bt(e, o, t, i.text, i.options)
                    }
                })
            }
            this.tokens.push(a),
            n && (this.tokens.push({
                index: e,
                text: "."
            }), this.tokens.push({
                index: e + 1,
                text: n
            }))
        },
        readString: function(e) {
            var t = this.index;
            this.index++;
            for (var n = "",
            r = e,
            i = !1; this.index < this.text.length;) {
                var o = this.text.charAt(this.index);
                if (r += o, i) {
                    if ("u" === o) {
                        var s = this.text.substring(this.index + 1, this.index + 5);
                        s.match(/[\da-f]{4}/i) || this.throwError("Invalid unicode escape [\\u" + s + "]"),
                        this.index += 4,
                        n += String.fromCharCode(parseInt(s, 16))
                    } else {
                        var a = fr[o];
                        n += a ? a: o
                    }
                    i = !1
                } else if ("\\" === o) i = !0;
                else {
                    if (o === e) return this.index++,
                    void this.tokens.push({
                        index: t,
                        text: r,
                        string: n,
                        literal: !0,
                        constant: !0,
                        fn: function() {
                            return n
                        }
                    });
                    n += o
                }
                this.index++
            }
            this.throwError("Unterminated quote", t)
        }
    };
    var mr = function(e, t, n) {
        this.lexer = e,
        this.$filter = t,
        this.options = n
    };
    mr.ZERO = h(function() {
        return 0
    },
    {
        constant: !0
    }),
    mr.prototype = {
        constructor: mr,
        parse: function(e) {
            this.text = e,
            this.tokens = this.lexer.lex(e);
            var t = this.statements();
            return 0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]),
            t.literal = !!t.literal,
            t.constant = !!t.constant,
            t
        },
        primary: function() {
            var e;
            if (this.expect("(")) e = this.filterChain(),
            this.consume(")");
            else if (this.expect("[")) e = this.arrayDeclaration();
            else if (this.expect("{")) e = this.object();
            else {
                var t = this.expect();
                e = t.fn,
                e || this.throwError("not a primary expression", t),
                e.literal = !!t.literal,
                e.constant = !!t.constant
            }
            for (var n, r; n = this.expect("(", "[", ".");)"(" === n.text ? (e = this.functionCall(e, r), r = null) : "[" === n.text ? (r = e, e = this.objectIndex(e)) : "." === n.text ? (r = e, e = this.fieldAccess(e)) : this.throwError("IMPOSSIBLE");
            return e
        },
        throwError: function(e, t) {
            throw lr("syntax", "Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].", t.text, e, t.index + 1, this.text, this.text.substring(t.index))
        },
        peekToken: function() {
            if (0 === this.tokens.length) throw lr("ueoe", "Unexpected end of expression: {0}", this.text);
            return this.tokens[0]
        },
        peek: function(e, t, n, r) {
            if (this.tokens.length > 0) {
                var i = this.tokens[0],
                o = i.text;
                if (o === e || o === t || o === n || o === r || !e && !t && !n && !r) return i
            }
            return ! 1
        },
        expect: function(e, t, n, r) {
            var i = this.peek(e, t, n, r);
            return i ? (this.tokens.shift(), i) : !1
        },
        consume: function(e) {
            this.expect(e) || this.throwError("is unexpected, expecting [" + e + "]", this.peek())
        },
        unaryFn: function(e, t) {
            return h(function(n, r) {
                return e(n, r, t)
            },
            {
                constant: t.constant
            })
        },
        ternaryFn: function(e, t, n) {
            return h(function(r, i) {
                return e(r, i) ? t(r, i) : n(r, i)
            },
            {
                constant: e.constant && t.constant && n.constant
            })
        },
        binaryFn: function(e, t, n) {
            return h(function(r, i) {
                return t(r, i, e, n)
            },
            {
                constant: e.constant && n.constant
            })
        },
        statements: function() {
            for (var e = [];;) if (this.tokens.length > 0 && !this.peek("}", ")", ";", "]") && e.push(this.filterChain()), !this.expect(";")) return 1 === e.length ? e[0] : function(t, n) {
                for (var r, i = 0; i < e.length; i++) {
                    var o = e[i];
                    o && (r = o(t, n))
                }
                return r
            }
        },
        filterChain: function() {
            for (var e, t = this.expression();;) {
                if (! (e = this.expect("|"))) return t;
                t = this.binaryFn(t, e.fn, this.filter())
            }
        },
        filter: function() {
            for (var e = this.expect(), t = this.$filter(e.text), n = [];;) {
                if (! (e = this.expect(":"))) {
                    var r = function(e, r, i) {
                        for (var o = [i], s = 0; s < n.length; s++) o.push(n[s](e, r));
                        return t.apply(e, o)
                    };
                    return function() {
                        return r
                    }
                }
                n.push(this.expression())
            }
        },
        expression: function() {
            return this.assignment()
        },
        assignment: function() {
            var e, t, n = this.ternary();
            return (t = this.expect("=")) ? (n.assign || this.throwError("implies assignment but [" + this.text.substring(0, t.index) + "] can not be assigned to", t), e = this.ternary(),
            function(t, r) {
                return n.assign(t, e(t, r), r)
            }) : n
        },
        ternary: function() {
            var e, t, n = this.logicalOR();
            return (t = this.expect("?")) ? (e = this.ternary(), (t = this.expect(":")) ? this.ternaryFn(n, e, this.ternary()) : void this.throwError("expected :", t)) : n
        },
        logicalOR: function() {
            for (var e, t = this.logicalAND();;) {
                if (! (e = this.expect("||"))) return t;
                t = this.binaryFn(t, e.fn, this.logicalAND())
            }
        },
        logicalAND: function() {
            var e, t = this.equality();
            return (e = this.expect("&&")) && (t = this.binaryFn(t, e.fn, this.logicalAND())),
            t
        },
        equality: function() {
            var e, t = this.relational();
            return (e = this.expect("==", "!=", "===", "!==")) && (t = this.binaryFn(t, e.fn, this.equality())),
            t
        },
        relational: function() {
            var e, t = this.additive();
            return (e = this.expect("<", ">", "<=", ">=")) && (t = this.binaryFn(t, e.fn, this.relational())),
            t
        },
        additive: function() {
            for (var e, t = this.multiplicative(); e = this.expect("+", "-");) t = this.binaryFn(t, e.fn, this.multiplicative());
            return t
        },
        multiplicative: function() {
            for (var e, t = this.unary(); e = this.expect("*", "/", "%");) t = this.binaryFn(t, e.fn, this.unary());
            return t
        },
        unary: function() {
            var e;
            return this.expect("+") ? this.primary() : (e = this.expect("-")) ? this.binaryFn(mr.ZERO, e.fn, this.unary()) : (e = this.expect("!")) ? this.unaryFn(e.fn, this.unary()) : this.primary()
        },
        fieldAccess: function(e) {
            var t = this,
            n = this.expect().text,
            r = xt(n, this.options, this.text);
            return h(function(t, n, i) {
                return r(i || e(t, n))
            },
            {
                assign: function(r, i, o) {
                    return bt(e(r, o), n, i, t.text, t.options)
                }
            })
        },
        objectIndex: function(e) {
            var t = this,
            r = this.expression();
            return this.consume("]"),
            h(function(i, o) {
                var s, a, l = e(i, o),
                u = r(i, o);
                return gt(u, t.text),
                l ? (s = yt(l[u], t.text), s && s.then && t.options.unwrapPromises && (a = s, "$$v" in s || (a.$$v = n, a.then(function(e) {
                    a.$$v = e
                })), s = s.$$v), s) : n
            },
            {
                assign: function(n, i, o) {
                    var s = r(n, o),
                    a = yt(e(n, o), t.text);
                    return a[s] = i
                }
            })
        },
        functionCall: function(e, t) {
            var n = [];
            if (")" !== this.peekToken().text) do n.push(this.expression());
            while (this.expect(","));
            this.consume(")");
            var r = this;
            return function(i, o) {
                for (var s = [], a = t ? t(i, o) : i, l = 0; l < n.length; l++) s.push(n[l](i, o));
                var u = e(i, o, a) || f;
                yt(a, r.text),
                jt(u, r.text);
                var c = u.apply ? u.apply(a, s) : u(s[0], s[1], s[2], s[3], s[4]);
                return yt(c, r.text)
            }
        },
        arrayDeclaration: function() {
            var e = [],
            t = !0;
            if ("]" !== this.peekToken().text) do {
                if (this.peek("]")) break;
                var n = this.expression();
                e.push(n), n.constant || (t = !1)
            } while ( this . expect (","));
            return this.consume("]"),
            h(function(t, n) {
                for (var r = [], i = 0; i < e.length; i++) r.push(e[i](t, n));
                return r
            },
            {
                literal: !0,
                constant: t
            })
        },
        object: function() {
            var e = [],
            t = !0;
            if ("}" !== this.peekToken().text) do {
                if (this.peek("}")) break;
                var n = this.expect(), r = n.string || n.text;
                this.consume(":");
                var i = this.expression();
                e.push({
                    key: r,
                    value: i
                }), i.constant || (t = !1)
            } while ( this . expect (","));
            return this.consume("}"),
            h(function(t, n) {
                for (var r = {},
                i = 0; i < e.length; i++) {
                    var o = e[i];
                    r[o.key] = o.value(t, n)
                }
                return r
            },
            {
                literal: !0,
                constant: t
            })
        }
    };
    var gr = {},
    yr = r("$sce"),
    jr = {
        HTML: "html",
        CSS: "css",
        URL: "url",
        RESOURCE_URL: "resourceUrl",
        JS: "js"
    },
    br = t.createElement("a"),
    $r = Ot(e.location.href, !0);
    Ht.$inject = ["$provide"],
    Bt.$inject = ["$locale"],
    qt.$inject = ["$locale"];
    var xr = ".",
    wr = {
        yyyy: Qt("FullYear", 4),
        yy: Qt("FullYear", 2, 0, !0),
        y: Qt("FullYear", 1),
        MMMM: Wt("Month"),
        MMM: Wt("Month", !0),
        MM: Qt("Month", 2, 1),
        M: Qt("Month", 1, 1),
        dd: Qt("Date", 2),
        d: Qt("Date", 1),
        HH: Qt("Hours", 2),
        H: Qt("Hours", 1),
        hh: Qt("Hours", 2, -12),
        h: Qt("Hours", 1, -12),
        mm: Qt("Minutes", 2),
        m: Qt("Minutes", 1),
        ss: Qt("Seconds", 2),
        s: Qt("Seconds", 1),
        sss: Qt("Milliseconds", 3),
        EEEE: Wt("Day"),
        EEE: Wt("Day", !0),
        a: Xt,
        Z: zt
    },
    Cr = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,
    Tr = /^\-?\d+$/;
    Gt.$inject = ["$locale"];
    var kr = m(dn),
    Er = m(vn);
    Kt.$inject = ["$parse"];
    var _r = m({
        restrict: "E",
        compile: function(e, n) {
            return 8 >= yn && (n.href || n.name || n.$set("href", ""), e.append(t.createComment("IE fix"))),
            n.href || n.xlinkHref || n.name ? void 0 : function(e, t) {
                var n = "[object SVGAnimatedString]" === Tn.call(t.prop("href")) ? "xlink:href": "href";
                t.on("click",
                function(e) {
                    t.attr(n) || e.preventDefault()
                })
            }
        }
    }),
    Sr = {};
    o(Wn,
    function(e, t) {
        if ("multiple" != e) {
            var n = Be("ng-" + t);
            Sr[n] = function() {
                return {
                    priority: 100,
                    link: function(e, r, i) {
                        e.$watch(i[n],
                        function(e) {
                            i.$set(t, !!e)
                        })
                    }
                }
            }
        }
    }),
    o(["onload", "src", "srcset", "href"],
    function(e) {
        var t = Be("ng-" + e);
        Sr[t] = function() {
            return {
                priority: 99,
                link: function(n, r, i) {
                    var o = e,
                    s = e;
                    "href" === e && "[object SVGAnimatedString]" === Tn.call(r.prop("href")) && (s = "xlinkHref", i.$attr[s] = "xlink:href", o = null),
                    i.$observe(t,
                    function(e) {
                        e && (i.$set(s, e), yn && o && r.prop(o, i[s]))
                    })
                }
            }
        }
    });
    var Mr = {
        $addControl: f,
        $removeControl: f,
        $setValidity: f,
        $setDirty: f,
        $setPristine: f
    };
    en.$inject = ["$element", "$attrs", "$scope", "$animate"];
    var Pr = function(e) {
        return ["$timeout",
        function(t) {
            var r = {
                name: "form",
                restrict: e ? "EAC": "E",
                controller: en,
                compile: function() {
                    return {
                        pre: function(e, r, i, o) {
                            if (!i.action) {
                                var s = function(e) {
                                    e.preventDefault ? e.preventDefault() : e.returnValue = !1
                                };
                                Dn(r[0], "submit", s),
                                r.on("$destroy",
                                function() {
                                    t(function() {
                                        On(r[0], "submit", s)
                                    },
                                    0, !1)
                                })
                            }
                            var a = r.parent().controller("form"),
                            l = i.name || i.ngForm;
                            l && bt(e, l, o, l),
                            a && r.on("$destroy",
                            function() {
                                a.$removeControl(o),
                                l && bt(e, l, n, l),
                                h(o, Mr)
                            })
                        }
                    }
                }
            };
            return r
        }]
    },
    Ar = Pr(),
    Nr = Pr(!0),
    Rr = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,
    Dr = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,
    Or = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,
    Lr = {
        text: on,
        number: sn,
        url: an,
        email: ln,
        radio: un,
        checkbox: cn,
        hidden: f,
        button: f,
        submit: f,
        reset: f,
        file: f
    },
    Fr = ["badInput"],
    Hr = ["$browser", "$sniffer",
    function(e, t) {
        return {
            restrict: "E",
            require: "?ngModel",
            link: function(n, r, i, o) {
                o && (Lr[dn(i.type)] || Lr.text)(n, r, i, o, t, e)
            }
        }
    }],
    Ir = "ng-valid",
    Br = "ng-invalid",
    qr = "ng-pristine",
    Ur = "ng-dirty",
    Vr = ["$scope", "$exceptionHandler", "$attrs", "$element", "$parse", "$animate",
    function(e, t, n, i, s, a) {
        function l(e, t) {
            t = t ? "-" + Z(t, "-") : "",
            a.removeClass(i, (e ? Br: Ir) + t),
            a.addClass(i, (e ? Ir: Br) + t)
        }
        this.$viewValue = Number.NaN,
        this.$modelValue = Number.NaN,
        this.$parsers = [],
        this.$formatters = [],
        this.$viewChangeListeners = [],
        this.$pristine = !0,
        this.$dirty = !1,
        this.$valid = !0,
        this.$invalid = !1,
        this.$name = n.name;
        var u = s(n.ngModel),
        c = u.assign;
        if (!c) throw r("ngModel")("nonassign", "Expression '{0}' is non-assignable. Element: {1}", n.ngModel, Q(i));
        this.$render = f,
        this.$isEmpty = function(e) {
            return g(e) || "" === e || null === e || e !== e
        };
        var h = i.inheritedData("$formController") || Mr,
        p = 0,
        d = this.$error = {};
        i.addClass(qr),
        l(!0),
        this.$setValidity = function(e, t) {
            d[e] !== !t && (t ? (d[e] && p--, p || (l(!0), this.$valid = !0, this.$invalid = !1)) : (l(!1), this.$invalid = !0, this.$valid = !1, p++), d[e] = !t, l(t, e), h.$setValidity(e, t, this))
        },
        this.$setPristine = function() {
            this.$dirty = !1,
            this.$pristine = !0,
            a.removeClass(i, Ur),
            a.addClass(i, qr)
        },
        this.$setViewValue = function(n) {
            this.$viewValue = n,
            this.$pristine && (this.$dirty = !0, this.$pristine = !1, a.removeClass(i, qr), a.addClass(i, Ur), h.$setDirty()),
            o(this.$parsers,
            function(e) {
                n = e(n)
            }),
            this.$modelValue !== n && (this.$modelValue = n, c(e, n), o(this.$viewChangeListeners,
            function(e) {
                try {
                    e()
                } catch(n) {
                    t(n)
                }
            }))
        };
        var v = this;
        e.$watch(function() {
            var t = u(e);
            if (v.$modelValue !== t) {
                var n = v.$formatters,
                r = n.length;
                for (v.$modelValue = t; r--;) t = n[r](t);
                v.$viewValue !== t && (v.$viewValue = t, v.$render())
            }
            return t
        })
    }],
    Qr = function() {
        return {
            require: ["ngModel", "^?form"],
            controller: Vr,
            link: function(e, t, n, r) {
                var i = r[0],
                o = r[1] || Mr;
                o.$addControl(i),
                e.$on("$destroy",
                function() {
                    o.$removeControl(i)
                })
            }
        }
    },
    Wr = m({
        require: "ngModel",
        link: function(e, t, n, r) {
            r.$viewChangeListeners.push(function() {
                e.$eval(n.ngChange)
            })
        }
    }),
    zr = function() {
        return {
            require: "?ngModel",
            link: function(e, t, n, r) {
                if (r) {
                    n.required = !0;
                    var i = function(e) {
                        return n.required && r.$isEmpty(e) ? void r.$setValidity("required", !1) : (r.$setValidity("required", !0), e)
                    };
                    r.$formatters.push(i),
                    r.$parsers.unshift(i),
                    n.$observe("required",
                    function() {
                        i(r.$viewValue)
                    })
                }
            }
        }
    },
    Xr = function() {
        return {
            require: "ngModel",
            link: function(e, t, r, i) {
                var s = /\/(.*)\//.exec(r.ngList),
                a = s && new RegExp(s[1]) || r.ngList || ",",
                l = function(e) {
                    if (!g(e)) {
                        var t = [];
                        return e && o(e.split(a),
                        function(e) {
                            e && t.push(Mn(e))
                        }),
                        t
                    }
                };
                i.$parsers.push(l),
                i.$formatters.push(function(e) {
                    return Sn(e) ? e.join(", ") : n
                }),
                i.$isEmpty = function(e) {
                    return ! e || !e.length
                }
            }
        }
    },
    Gr = /^(true|false|\d+)$/,
    Yr = function() {
        return {
            priority: 100,
            compile: function(e, t) {
                return Gr.test(t.ngValue) ?
                function(e, t, n) {
                    n.$set("value", e.$eval(n.ngValue))
                }: function(e, t, n) {
                    e.$watch(n.ngValue,
                    function(e) {
                        n.$set("value", e)
                    })
                }
            }
        }
    },
    Jr = Zt({
        compile: function(e) {
            return e.addClass("ng-binding"),
            function(e, t, r) {
                t.data("$binding", r.ngBind),
                e.$watch(r.ngBind,
                function(e) {
                    t.text(e == n ? "": e)
                })
            }
        }
    }),
    Kr = ["$interpolate",
    function(e) {
        return function(t, n, r) {
            var i = e(n.attr(r.$attr.ngBindTemplate));
            n.addClass("ng-binding").data("$binding", i),
            r.$observe("ngBindTemplate",
            function(e) {
                n.text(e)
            })
        }
    }],
    Zr = ["$sce", "$parse",
    function(e, t) {
        return function(n, r, i) {
            function o() {
                return (s(n) || "").toString()
            }
            r.addClass("ng-binding").data("$binding", i.ngBindHtml);
            var s = t(i.ngBindHtml);
            n.$watch(o,
            function(t) {
                r.html(e.getTrustedHtml(s(n)) || "")
            })
        }
    }],
    ei = hn("", !0),
    ti = hn("Odd", 0),
    ni = hn("Even", 1),
    ri = Zt({
        compile: function(e, t) {
            t.$set("ngCloak", n),
            e.removeClass("ng-cloak")
        }
    }),
    ii = [function() {
        return {
            scope: !0,
            controller: "@",
            priority: 500
        }
    }],
    oi = {};
    o("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),
    function(e) {
        var t = Be("ng-" + e);
        oi[t] = ["$parse",
        function(n) {
            return {
                compile: function(r, i) {
                    var o = n(i[t]);
                    return function(t, n) {
                        n.on(dn(e),
                        function(e) {
                            t.$apply(function() {
                                o(t, {
                                    $event: e
                                })
                            })
                        })
                    }
                }
            }
        }]
    });
    var si = ["$animate",
    function(e) {
        return {
            transclude: "element",
            priority: 600,
            terminal: !0,
            restrict: "A",
            $$tlb: !0,
            link: function(n, r, i, o, s) {
                var a, l, u;
                n.$watch(i.ngIf,
                function(o) {
                    V(o) ? l || (l = n.$new(), s(l,
                    function(n) {
                        n[n.length++] = t.createComment(" end ngIf: " + i.ngIf + " "),
                        a = {
                            clone: n
                        },
                        e.enter(n, r.parent(), r)
                    })) : (u && (u.remove(), u = null), l && (l.$destroy(), l = null), a && (u = oe(a.clone), e.leave(u,
                    function() {
                        u = null
                    }), a = null))
                })
            }
        }
    }],
    ai = ["$http", "$templateCache", "$anchorScroll", "$animate", "$sce",
    function(e, t, n, r, i) {
        return {
            restrict: "ECA",
            priority: 400,
            terminal: !0,
            transclude: "element",
            controller: En.noop,
            compile: function(o, s) {
                var a = s.ngInclude || s.src,
                l = s.onload || "",
                u = s.autoscroll;
                return function(o, s, c, h, p) {
                    var d, f, v, m = 0,
                    g = function() {
                        f && (f.remove(), f = null),
                        d && (d.$destroy(), d = null),
                        v && (r.leave(v,
                        function() {
                            f = null
                        }), f = v, v = null)
                    };
                    o.$watch(i.parseAsResourceUrl(a),
                    function(i) {
                        var a = function() { ! y(u) || u && !o.$eval(u) || n()
                        },
                        c = ++m;
                        i ? (e.get(i, {
                            cache: t
                        }).success(function(e) {
                            if (c === m) {
                                var t = o.$new();
                                h.template = e;
                                var n = p(t,
                                function(e) {
                                    g(),
                                    r.enter(e, null, s, a)
                                });
                                d = t,
                                v = n,
                                d.$emit("$includeContentLoaded"),
                                o.$eval(l)
                            }
                        }).error(function() {
                            c === m && g()
                        }), o.$emit("$includeContentRequested")) : (g(), h.template = null)
                    })
                }
            }
        }
    }],
    li = ["$compile",
    function(e) {
        return {
            restrict: "ECA",
            priority: -400,
            require: "ngInclude",
            link: function(t, n, r, i) {
                n.html(i.template),
                e(n.contents())(t)
            }
        }
    }],
    ui = Zt({
        priority: 450,
        compile: function() {
            return {
                pre: function(e, t, n) {
                    e.$eval(n.ngInit)
                }
            }
        }
    }),
    ci = Zt({
        terminal: !0,
        priority: 1e3
    }),
    hi = ["$locale", "$interpolate",
    function(e, t) {
        var n = /{}/g;
        return {
            restrict: "EA",
            link: function(r, i, s) {
                var a = s.count,
                l = s.$attr.when && i.attr(s.$attr.when),
                u = s.offset || 0,
                c = r.$eval(l) || {},
                h = {},
                p = t.startSymbol(),
                d = t.endSymbol(),
                f = /^when(Minus)?(.+)$/;
                o(s,
                function(e, t) {
                    f.test(t) && (c[dn(t.replace("when", "").replace("Minus", "-"))] = i.attr(s.$attr[t]))
                }),
                o(c,
                function(e, r) {
                    h[r] = t(e.replace(n, p + a + "-" + u + d))
                }),
                r.$watch(function() {
                    var t = parseFloat(r.$eval(a));
                    return isNaN(t) ? "": (t in c || (t = e.pluralCat(t - u)), h[t](r, i, !0))
                },
                function(e) {
                    i.text(e)
                })
            }
        }
    }],
    pi = ["$parse", "$animate",
    function(e, n) {
        function s(e) {
            return e.clone[0]
        }
        function a(e) {
            return e.clone[e.clone.length - 1]
        }
        var l = "$$NG_REMOVED",
        u = r("ngRepeat");
        return {
            transclude: "element",
            priority: 1e3,
            terminal: !0,
            $$tlb: !0,
            link: function(r, c, h, p, d) {
                var f, v, m, g, y, j, b, $, x, w = h.ngRepeat,
                C = w.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),
                T = {
                    $id: Me
                };
                if (!C) throw u("iexp", "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", w);
                if (j = C[1], b = C[2], f = C[3], f ? (v = e(f), m = function(e, t, n) {
                    return x && (T[x] = e),
                    T[$] = t,
                    T.$index = n,
                    v(r, T)
                }) : (g = function(e, t) {
                    return Me(t)
                },
                y = function(e) {
                    return e
                }), C = j.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/), !C) throw u("iidexp", "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", j);
                $ = C[3] || C[1],
                x = C[2];
                var k = {};
                r.$watchCollection(b,
                function(e) {
                    var h, p, f, v, j, b, C, T, E, _, S, M, P = c[0],
                    A = {},
                    N = [];
                    if (i(e)) _ = e,
                    E = m || g;
                    else {
                        E = m || y,
                        _ = [];
                        for (b in e) e.hasOwnProperty(b) && "$" != b.charAt(0) && _.push(b);
                        _.sort()
                    }
                    for (v = _.length, p = N.length = _.length, h = 0; p > h; h++) if (b = e === _ ? h: _[h], C = e[b], T = E(b, C, h), re(T, "`track by` id"), k.hasOwnProperty(T)) S = k[T],
                    delete k[T],
                    A[T] = S,
                    N[h] = S;
                    else {
                        if (A.hasOwnProperty(T)) throw o(N,
                        function(e) {
                            e && e.scope && (k[e.id] = e)
                        }),
                        u("dupes", "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}", w, T);
                        N[h] = {
                            id: T
                        },
                        A[T] = !1
                    }
                    for (b in k) k.hasOwnProperty(b) && (S = k[b], M = oe(S.clone), n.leave(M), o(M,
                    function(e) {
                        e[l] = !0
                    }), S.scope.$destroy());
                    for (h = 0, p = _.length; p > h; h++) {
                        if (b = e === _ ? h: _[h], C = e[b], S = N[h], N[h - 1] && (P = a(N[h - 1])), S.scope) {
                            j = S.scope,
                            f = P;
                            do f = f.nextSibling;
                            while (f && f[l]);
                            s(S) != f && n.move(oe(S.clone), null, jn(P)),
                            P = a(S)
                        } else j = r.$new();
                        j[$] = C,
                        x && (j[x] = b),
                        j.$index = h,
                        j.$first = 0 === h,
                        j.$last = h === v - 1,
                        j.$middle = !(j.$first || j.$last),
                        j.$odd = !(j.$even = 0 === (1 & h)),
                        S.scope || d(j,
                        function(e) {
                            e[e.length++] = t.createComment(" end ngRepeat: " + w + " "),
                            n.enter(e, null, jn(P)),
                            P = e,
                            S.scope = j,
                            S.clone = e,
                            A[S.id] = S
                        })
                    }
                    k = A
                })
            }
        }
    }],
    di = ["$animate",
    function(e) {
        return function(t, n, r) {
            t.$watch(r.ngShow,
            function(t) {
                e[V(t) ? "removeClass": "addClass"](n, "ng-hide")
            })
        }
    }],
    fi = ["$animate",
    function(e) {
        return function(t, n, r) {
            t.$watch(r.ngHide,
            function(t) {
                e[V(t) ? "addClass": "removeClass"](n, "ng-hide")
            })
        }
    }],
    vi = Zt(function(e, t, n) {
        e.$watch(n.ngStyle,
        function(e, n) {
            n && e !== n && o(n,
            function(e, n) {
                t.css(n, "")
            }),
            e && t.css(e)
        },
        !0)
    }),
    mi = ["$animate",
    function(e) {
        return {
            restrict: "EA",
            require: "ngSwitch",
            controller: ["$scope",
            function() {
                this.cases = {}
            }],
            link: function(t, n, r, i) {
                var s = r.ngSwitch || r.on,
                a = [],
                l = [],
                u = [],
                c = [];
                t.$watch(s,
                function(n) {
                    var s, h;
                    for (s = 0, h = u.length; h > s; ++s) u[s].remove();
                    for (u.length = 0, s = 0, h = c.length; h > s; ++s) {
                        var p = l[s];
                        c[s].$destroy(),
                        u[s] = p,
                        e.leave(p,
                        function() {
                            u.splice(s, 1)
                        })
                    }
                    l.length = 0,
                    c.length = 0,
                    (a = i.cases["!" + n] || i.cases["?"]) && (t.$eval(r.change), o(a,
                    function(n) {
                        var r = t.$new();
                        c.push(r),
                        n.transclude(r,
                        function(t) {
                            var r = n.element;
                            l.push(t),
                            e.enter(t, r.parent(), r)
                        })
                    }))
                })
            }
        }
    }],
    gi = Zt({
        transclude: "element",
        priority: 800,
        require: "^ngSwitch",
        link: function(e, t, n, r, i) {
            r.cases["!" + n.ngSwitchWhen] = r.cases["!" + n.ngSwitchWhen] || [],
            r.cases["!" + n.ngSwitchWhen].push({
                transclude: i,
                element: t
            })
        }
    }),
    yi = Zt({
        transclude: "element",
        priority: 800,
        require: "^ngSwitch",
        link: function(e, t, n, r, i) {
            r.cases["?"] = r.cases["?"] || [],
            r.cases["?"].push({
                transclude: i,
                element: t
            })
        }
    }),
    ji = Zt({
        link: function(e, t, n, i, o) {
            if (!o) throw r("ngTransclude")("orphan", "Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}", Q(t));
            o(function(e) {
                t.empty(),
                t.append(e)
            })
        }
    }),
    bi = ["$templateCache",
    function(e) {
        return {
            restrict: "E",
            terminal: !0,
            compile: function(t, n) {
                if ("text/ng-template" == n.type) {
                    var r = n.id,
                    i = t[0].text;
                    e.put(r, i)
                }
            }
        }
    }],
    $i = r("ngOptions"),
    xi = m({
        terminal: !0
    }),
    wi = ["$compile", "$parse",
    function(e, r) {
        var i = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
        a = {
            $setViewValue: f
        };
        return {
            restrict: "E",
            require: ["select", "?ngModel"],
            controller: ["$element", "$scope", "$attrs",
            function(e, t, n) {
                var r, i, o = this,
                s = {},
                l = a;
                o.databound = n.ngModel,
                o.init = function(e, t, n) {
                    l = e,
                    r = t,
                    i = n
                },
                o.addOption = function(t) {
                    re(t, '"option value"'),
                    s[t] = !0,
                    l.$viewValue == t && (e.val(t), i.parent() && i.remove())
                },
                o.removeOption = function(e) {
                    this.hasOption(e) && (delete s[e], l.$viewValue == e && this.renderUnknownOption(e))
                },
                o.renderUnknownOption = function(t) {
                    var n = "? " + Me(t) + " ?";
                    i.val(n),
                    e.prepend(i),
                    e.val(n),
                    i.prop("selected", !0)
                },
                o.hasOption = function(e) {
                    return s.hasOwnProperty(e)
                },
                t.$on("$destroy",
                function() {
                    o.renderUnknownOption = f
                })
            }],
            link: function(a, l, u, c) {
                function h(e, t, n, r) {
                    n.$render = function() {
                        var e = n.$viewValue;
                        r.hasOption(e) ? (C.parent() && C.remove(), t.val(e), "" === e && f.prop("selected", !0)) : g(e) && f ? t.val("") : r.renderUnknownOption(e)
                    },
                    t.on("change",
                    function() {
                        e.$apply(function() {
                            C.parent() && C.remove(),
                            n.$setViewValue(t.val())
                        })
                    })
                }
                function p(e, t, n) {
                    var r;
                    n.$render = function() {
                        var e = new Pe(n.$viewValue);
                        o(t.find("option"),
                        function(t) {
                            t.selected = y(e.get(t.value))
                        })
                    },
                    e.$watch(function() {
                        O(r, n.$viewValue) || (r = D(n.$viewValue), n.$render())
                    }),
                    t.on("change",
                    function() {
                        e.$apply(function() {
                            var e = [];
                            o(t.find("option"),
                            function(t) {
                                t.selected && e.push(t.value)
                            }),
                            n.$setViewValue(e)
                        })
                    })
                }
                function d(t, o, a) {
                    function l() {
                        var e, n, r, i, l, u, m, b, T, k, E, _, S, M, P, A = {
                            "": []
                        },
                        N = [""],
                        R = a.$modelValue,
                        D = v(t) || [],
                        O = p ? s(D) : D,
                        L = {},
                        F = !1;
                        if (j) if (g && Sn(R)) {
                            F = new Pe([]);
                            for (var H = 0; H < R.length; H++) L[h] = R[H],
                            F.put(g(t, L), R[H])
                        } else F = new Pe(R);
                        for (E = 0; T = O.length, T > E; E++) {
                            if (m = E, p) {
                                if (m = O[E], "$" === m.charAt(0)) continue;
                                L[p] = m
                            }
                            if (L[h] = D[m], e = d(t, L) || "", (n = A[e]) || (n = A[e] = [], N.push(e)), j) _ = y(F.remove(g ? g(t, L) : f(t, L)));
                            else {
                                if (g) {
                                    var I = {};
                                    I[h] = R,
                                    _ = g(t, I) === g(t, L)
                                } else _ = R === f(t, L);
                                F = F || _
                            }
                            P = c(t, L),
                            P = y(P) ? P: "",
                            n.push({
                                id: g ? g(t, L) : p ? O[E] : E,
                                label: P,
                                selected: _
                            })
                        }
                        for (j || ($ || null === R ? A[""].unshift({
                            id: "",
                            label: "",
                            selected: !F
                        }) : F || A[""].unshift({
                            id: "?",
                            label: "",
                            selected: !0
                        })), k = 0, b = N.length; b > k; k++) {
                            for (e = N[k], n = A[e], C.length <= k ? (i = {
                                element: w.clone().attr("label", e),
                                label: n.label
                            },
                            l = [i], C.push(l), o.append(i.element)) : (l = C[k], i = l[0], i.label != e && i.element.attr("label", i.label = e)), S = null, E = 0, T = n.length; T > E; E++) r = n[E],
                            (u = l[E + 1]) ? (S = u.element, u.label !== r.label && S.text(u.label = r.label), u.id !== r.id && S.val(u.id = r.id), u.selected !== r.selected && S.prop("selected", u.selected = r.selected)) : ("" === r.id && $ ? M = $: (M = x.clone()).val(r.id).prop("selected", r.selected).text(r.label), l.push(u = {
                                element: M,
                                label: r.label,
                                id: r.id,
                                selected: r.selected
                            }), S ? S.after(M) : i.element.append(M), S = M);
                            for (E++; l.length > E;) l.pop().element.remove()
                        }
                        for (; C.length > k;) C.pop()[0].element.remove()
                    }
                    var u;
                    if (! (u = b.match(i))) throw $i("iexp", "Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}", b, Q(o));
                    var c = r(u[2] || u[1]),
                    h = u[4] || u[6],
                    p = u[5],
                    d = r(u[3] || ""),
                    f = r(u[2] ? u[1] : h),
                    v = r(u[7]),
                    m = u[8],
                    g = m ? r(u[8]) : null,
                    C = [[{
                        element: o,
                        label: ""
                    }]];
                    $ && (e($)(t), $.removeClass("ng-scope"), $.remove()),
                    o.empty(),
                    o.on("change",
                    function() {
                        t.$apply(function() {
                            var e, r, i, s, l, u, c, d, m, y = v(t) || [],
                            b = {};
                            if (j) {
                                for (i = [], u = 0, d = C.length; d > u; u++) for (e = C[u], l = 1, c = e.length; c > l; l++) if ((s = e[l].element)[0].selected) {
                                    if (r = s.val(), p && (b[p] = r), g) for (m = 0; m < y.length && (b[h] = y[m], g(t, b) != r); m++);
                                    else b[h] = y[r];
                                    i.push(f(t, b))
                                }
                            } else {
                                if (r = o.val(), "?" == r) i = n;
                                else if ("" === r) i = null;
                                else if (g) {
                                    for (m = 0; m < y.length; m++) if (b[h] = y[m], g(t, b) == r) {
                                        i = f(t, b);
                                        break
                                    }
                                } else b[h] = y[r],
                                p && (b[p] = r),
                                i = f(t, b);
                                C[0].length > 1 && C[0][1].id !== r && (C[0][1].selected = !1)
                            }
                            a.$setViewValue(i)
                        })
                    }),
                    a.$render = l,
                    t.$watch(l)
                }
                if (c[1]) {
                    for (var f, v = c[0], m = c[1], j = u.multiple, b = u.ngOptions, $ = !1, x = jn(t.createElement("option")), w = jn(t.createElement("optgroup")), C = x.clone(), T = 0, k = l.children(), E = k.length; E > T; T++) if ("" === k[T].value) {
                        f = $ = k.eq(T);
                        break
                    }
                    v.init(m, $, C),
                    j && (m.$isEmpty = function(e) {
                        return ! e || 0 === e.length
                    }),
                    b ? d(a, l, m) : j ? p(a, l, m) : h(a, l, m, v)
                }
            }
        }
    }],
    Ci = ["$interpolate",
    function(e) {
        var t = {
            addOption: f,
            removeOption: f
        };
        return {
            restrict: "E",
            priority: 100,
            compile: function(n, r) {
                if (g(r.value)) {
                    var i = e(n.text(), !0);
                    i || r.$set("value", n.text())
                }
                return function(e, n, r) {
                    var o = "$selectController",
                    s = n.parent(),
                    a = s.data(o) || s.parent().data(o);
                    a && a.databound ? n.prop("selected", !1) : a = t,
                    i ? e.$watch(i,
                    function(e, t) {
                        r.$set("value", e),
                        e !== t && a.removeOption(t),
                        a.addOption(e)
                    }) : a.addOption(r.value),
                    n.on("$destroy",
                    function() {
                        a.removeOption(r.value)
                    })
                }
            }
        }
    }],
    Ti = m({
        restrict: "E",
        terminal: !0
    });
    return e.angular.bootstrap ? void console.log("WARNING: Tried to load angular more than once.") : (ee(), ae(En), void jn(t).ready(function() {
        J(t, K)
    }))
} (window, document),
!window.angular.$$csp() && window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}</style>'),
function(e, t, n) {
    "use strict";
    function r() {
        function e(e, n) {
            return t.extend(new(t.extend(function() {},
            {
                prototype: e
            })), n)
        }
        function n(e, t) {
            var n = t.caseInsensitiveMatch,
            r = {
                originalPath: e,
                regexp: e
            },
            i = r.keys = [];
            return e = e.replace(/([().])/g, "\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,
            function(e, t, n, r) {
                var o = "?" === r ? r: null,
                s = "*" === r ? r: null;
                return i.push({
                    name: n,
                    optional: !!o
                }),
                t = t || "",
                "" + (o ? "": t) + "(?:" + (o ? t: "") + (s && "(.+?)" || "([^/]+)") + (o || "") + ")" + (o || "")
            }).replace(/([\/$\*])/g, "\\$1"),
            r.regexp = new RegExp("^" + e + "$", n ? "i": ""),
            r
        }
        var r = {};
        this.when = function(e, i) {
            if (r[e] = t.extend({
                reloadOnSearch: !0
            },
            i, e && n(e, i)), e) {
                var o = "/" == e[e.length - 1] ? e.substr(0, e.length - 1) : e + "/";
                r[o] = t.extend({
                    redirectTo: e
                },
                n(o, i))
            }
            return this
        },
        this.otherwise = function(e) {
            return this.when(null, e),
            this
        },
        this.$get = ["$rootScope", "$location", "$routeParams", "$q", "$injector", "$http", "$templateCache", "$sce",
        function(n, i, o, s, a, l, u, c) {
            function h(e, t) {
                var n = t.keys,
                r = {};
                if (!t.regexp) return null;
                var i = t.regexp.exec(e);
                if (!i) return null;
                for (var o = 1,
                s = i.length; s > o; ++o) {
                    var a = n[o - 1],
                    l = "string" == typeof i[o] ? decodeURIComponent(i[o]) : i[o];
                    a && l && (r[a.name] = l)
                }
                return r
            }
            function p() {
                var e = d(),
                r = m.current;
                e && r && e.$$route === r.$$route && t.equals(e.pathParams, r.pathParams) && !e.reloadOnSearch && !v ? (r.params = e.params, t.copy(r.params, o), n.$broadcast("$routeUpdate", r)) : (e || r) && (v = !1, n.$broadcast("$routeChangeStart", e, r), m.current = e, e && e.redirectTo && (t.isString(e.redirectTo) ? i.path(f(e.redirectTo, e.params)).search(e.params).replace() : i.url(e.redirectTo(e.pathParams, i.path(), i.search())).replace()), s.when(e).then(function() {
                    if (e) {
                        var n, r, i = t.extend({},
                        e.resolve);
                        return t.forEach(i,
                        function(e, n) {
                            i[n] = t.isString(e) ? a.get(e) : a.invoke(e)
                        }),
                        t.isDefined(n = e.template) ? t.isFunction(n) && (n = n(e.params)) : t.isDefined(r = e.templateUrl) && (t.isFunction(r) && (r = r(e.params)), r = c.getTrustedResourceUrl(r), t.isDefined(r) && (e.loadedTemplateUrl = r, n = l.get(r, {
                            cache: u
                        }).then(function(e) {
                            return e.data
                        }))),
                        t.isDefined(n) && (i.$template = n),
                        s.all(i)
                    }
                }).then(function(i) {
                    e == m.current && (e && (e.locals = i, t.copy(e.params, o)), n.$broadcast("$routeChangeSuccess", e, r))
                },
                function(t) {
                    e == m.current && n.$broadcast("$routeChangeError", e, r, t)
                }))
            }
            function d() {
                var n, o;
                return t.forEach(r,
                function(r, s) { ! o && (n = h(i.path(), r)) && (o = e(r, {
                        params: t.extend({},
                        i.search(), n),
                        pathParams: n
                    }), o.$$route = r)
                }),
                o || r[null] && e(r[null], {
                    params: {},
                    pathParams: {}
                })
            }
            function f(e, n) {
                var r = [];
                return t.forEach((e || "").split(":"),
                function(e, t) {
                    if (0 === t) r.push(e);
                    else {
                        var i = e.match(/(\w+)(.*)/),
                        o = i[1];
                        r.push(n[o]),
                        r.push(i[2] || ""),
                        delete n[o]
                    }
                }),
                r.join("")
            }
            var v = !1,
            m = {
                routes: r,
                reload: function() {
                    v = !0,
                    n.$evalAsync(p)
                }
            };
            return n.$on("$locationChangeSuccess", p),
            m
        }]
    }
    function i() {
        this.$get = function() {
            return {}
        }
    }
    function o(e, n, r) {
        return {
            restrict: "ECA",
            terminal: !0,
            priority: 400,
            transclude: "element",
            link: function(i, o, s, a, l) {
                function u() {
                    d && (d.remove(), d = null),
                    h && (h.$destroy(), h = null),
                    p && (r.leave(p,
                    function() {
                        d = null
                    }), d = p, p = null)
                }
                function c() {
                    var s = e.current && e.current.locals,
                    a = s && s.$template;
                    if (t.isDefined(a)) {
                        var c = i.$new(),
                        d = e.current,
                        m = l(c,
                        function(e) {
                            r.enter(e, null, p || o,
                            function() { ! t.isDefined(f) || f && !i.$eval(f) || n()
                            }),
                            u()
                        });
                        p = m,
                        h = d.scope = c,
                        h.$emit("$viewContentLoaded"),
                        h.$eval(v)
                    } else u()
                }
                var h, p, d, f = s.autoscroll,
                v = s.onload || "";
                i.$on("$routeChangeSuccess", c),
                c()
            }
        }
    }
    function s(e, t, n) {
        return {
            restrict: "ECA",
            priority: -400,
            link: function(r, i) {
                var o = n.current,
                s = o.locals;
                i.html(s.$template);
                var a = e(i.contents());
                if (o.controller) {
                    s.$scope = r;
                    var l = t(o.controller, s);
                    o.controllerAs && (r[o.controllerAs] = l),
                    i.data("$ngControllerController", l),
                    i.children().data("$ngControllerController", l)
                }
                a(r)
            }
        }
    }
    var a = t.module("ngRoute", ["ng"]).provider("$route", r);
    a.provider("$routeParams", i),
    a.directive("ngView", o),
    a.directive("ngView", s),
    o.$inject = ["$route", "$anchorScroll", "$animate"],
    s.$inject = ["$compile", "$controller", "$route"]
} (window, window.angular),
angular.module("ngCookies", ["ng"]).provider("$cookies", [function() {
    function e(e) {
        return e ? angular.extend({},
        t, e) : t
    }
    var t = this.defaults = {};
    this.$get = ["$$cookieReader", "$$cookieWriter",
    function(t, n) {
        return {
            get: function(e) {
                return t()[e]
            },
            getObject: function(e) {
                var t = this.get(e);
                return t ? angular.fromJson(t) : t;
            },
            getAll: function() {
                return t()
            },
            put: function(t, r, i) {
                n(t, r, e(i))
            },
            putObject: function(e, t, n) {
                this.put(e, angular.toJson(t), n)
            },
            remove: function(t, r) {
                n(t, void 0, e(r))
            }
        }
    }]
}]),
$$CookieReader.$inject = ["$document"],
angular.module("ngCookies").provider("$$cookieReader",
function() {
    this.$get = $$CookieReader
}),
$$CookieWriter.$inject = ["$document", "$log", "$browser"],
angular.module("ngCookies").provider("$$cookieWriter",
function() {
    this.$get = $$CookieWriter
}),
function(e, t) {
    "use strict";
    var n = "@2x",
    r = /^data:([a-z]+\/[a-z]+(;[a-z\-]+\=[a-z\-]+)?)?(;base64)?,(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/,
    i = e.module("ngRetina", []).config(["$provide",
    function(e) {
        e.decorator("ngSrcDirective", ["$delegate",
        function(e) {
            return e[0].compile = function(e, t) {},
            e
        }])
    }]);
    i.provider("ngRetina",
    function() {
        this.setInfix = function(e) {
            n = e
        },
        this.$get = e.noop
    }),
    i.directive("ngSrc", ["$window", "$http",
    function(e, i) {
        function o(e) {
            var t = e.split(".");
            return t.length < 2 ? e: (t[t.length - 2] += n, t.join("."))
        }
        var s = parseInt((/msie (\d+)/.exec(e.navigator.userAgent.toLowerCase()) || [])[1], 10),
        a = function() {
            var t = "(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)";
            return e.devicePixelRatio > 1 ? !0 : e.matchMedia && e.matchMedia(t).matches
        } ();
        return function(n, l, u) {
            function c(e) {
                u.$set("src", e),
                s && l.prop("src", e)
            }
            function h(t) {
                var n = e.sessionStorage.getItem(t);
                n ? c(n) : (n = o(t), i.head(n).success(function(r, i) {
                    c(n),
                    e.sessionStorage.setItem(t, n)
                }).error(function(n, r, i, o) {
                    c(t),
                    e.sessionStorage.setItem(t, t)
                }))
            }
            u.$observe("ngSrc",
            function(n) {
                n && (a && u.noretina === t && "object" == typeof e.sessionStorage && "IMG" === l[0].tagName && !n.match(r) ? h(n) : c(n))
            })
        }
    }])
} (window.angular),
function(e, t, n) {
    "use strict";
    function r(e, t, n) {
        o.directive(e, ["$parse", "$swipe",
        function(r, i) {
            var o = 75,
            s = .3,
            a = 30;
            return function(l, u, c) {
                function h(e) {
                    if (!p) return ! 1;
                    var n = Math.abs(e.y - p.y),
                    r = (e.x - p.x) * t;
                    return d && o > n && r > 0 && r > a && s > n / r
                }
                var p, d, f = r(c[e]);
                i.bind(u, {
                    start: function(e, t) {
                        p = e,
                        d = !0
                    },
                    cancel: function(e) {
                        d = !1
                    },
                    end: function(e, t) {
                        h(e) && l.$apply(function() {
                            u.triggerHandler(n),
                            f(l, {
                                $event: t
                            })
                        })
                    }
                })
            }
        }])
    }
    function i(e, t, n) {
        o.directive(e, ["$parse", "$swipe",
        function(r, i) {
            var o = 75,
            s = .3,
            a = 30;
            return function(l, u, c) {
                function h(e) {
                    if (!p) return ! 1;
                    var n = Math.abs(e.x - p.x),
                    r = (e.y - p.y) * t;
                    return d && o > n && r > 0 && r > a && s > n / r
                }
                var p, d, f = r(c[e]);
                i.bind(u, {
                    start: function(e, t) {
                        p = e,
                        d = !0
                    },
                    cancel: function(e) {
                        d = !1
                    },
                    end: function(e, t) {
                        h(e) && l.$apply(function() {
                            u.triggerHandler(n),
                            f(l, {
                                $event: t
                            })
                        })
                    }
                })
            }
        }])
    }
    var o = t.module("ngTouch", []);
    o.factory("$swipe", [function() {
        function e(e) {
            var t = e.touches && e.touches.length ? e.touches: [e],
            n = e.changedTouches && e.changedTouches[0] || e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] || t[0].originalEvent || t[0];
            return {
                x: n.clientX,
                y: n.clientY
            }
        }
        var t = 10;
        return {
            bind: function(n, r) {
                var i, o, s, a, l = !1;
                n.on("touchstart mousedown",
                function(t) {
                    s = e(t),
                    l = !0,
                    i = 0,
                    o = 0,
                    a = s,
                    r.start && r.start(s, t)
                }),
                n.on("touchcancel",
                function(e) {
                    l = !1,
                    r.cancel && r.cancel(e)
                }),
                n.on("touchmove mousemove",
                function(n) {
                    if (l && s) {
                        var u = e(n);
                        i += Math.abs(u.x - a.x),
                        o += Math.abs(u.y - a.y),
                        a = u,
                        t > i && t > o || (i > o && n.preventDefault(), r.move && r.move(u, n))
                    }
                }),
                n.on("touchend mouseup",
                function(t) {
                    l && (l = !1, r.end && r.end(e(t), t))
                })
            }
        }
    }]),
    o.config(["$provide",
    function(e) {
        e.decorator("ngClickDirective", ["$delegate",
        function(e) {
            return e.shift(),
            e
        }])
    }]),
    o.directive("ngClick", ["$parse", "$timeout", "$rootElement",
    function(e, n, r) {
        function i(e, t, n, r) {
            return Math.abs(e - n) < v && Math.abs(t - r) < v
        }
        function o(e, t, n) {
            for (var r = 0; r < e.length; r += 2) if (i(e[r], e[r + 1], t, n)) return e.splice(r, r + 2),
            !0;
            return ! 1
        }
        function s(e) {
            if (! (Date.now() - u > f)) {
                var t = e.touches && e.touches.length ? e.touches: [e],
                n = t[0].clientX,
                r = t[0].clientY;
                1 > n && 1 > r || h && h[0] === n && h[1] === r || (h && (h = null), "label" === e.target.tagName.toLowerCase() && (h = [n, r]), o(c, n, r) || (e.stopPropagation(), e.preventDefault(), e.target && e.target.blur()))
            }
        }
        function a(e) {
            var t = e.touches && e.touches.length ? e.touches: [e],
            r = t[0].clientX,
            i = t[0].clientY;
            c.push(r, i),
            n(function() {
                for (var e = 0; e < c.length; e += 2) if (c[e] == r && c[e + 1] == i) return void c.splice(e, e + 2)
            },
            f, !1)
        }
        function l(e, t) {
            c || (r[0].addEventListener("click", s, !0), r[0].addEventListener("touchstart", a, !0), c = []),
            u = Date.now(),
            o(c, e, t)
        }
        var u, c, h, p = 750,
        d = 12,
        f = 2500,
        v = 25,
        m = "ng-click-active";
        return function(n, r, i) {
            function o() {
                f = !1,
                r.removeClass(m)
            }
            var s, a, u, c, h = e(i.ngClick),
            f = !1;
            r.on("touchstart",
            function(e) {
                f = !0,
                s = e.target ? e.target: e.srcElement,
                3 == s.nodeType && (s = s.parentNode),
                r.addClass(m),
                a = Date.now();
                var t = e.touches && e.touches.length ? e.touches: [e],
                n = t[0].originalEvent || t[0];
                u = n.clientX,
                c = n.clientY
            }),
            r.on("touchmove",
            function(e) {
                o()
            }),
            r.on("touchcancel",
            function(e) {
                o()
            }),
            r.on("touchend",
            function(e) {
                var n = Date.now() - a,
                h = e.changedTouches && e.changedTouches.length ? e.changedTouches: e.touches && e.touches.length ? e.touches: [e],
                v = h[0].originalEvent || h[0],
                m = v.clientX,
                g = v.clientY,
                y = Math.sqrt(Math.pow(m - u, 2) + Math.pow(g - c, 2));
                f && p > n && d > y && (l(m, g), s && s.blur(), t.isDefined(i.disabled) && i.disabled !== !1 || r.triggerHandler("click", [e])),
                o()
            }),
            r.onclick = function(e) {},
            r.on("click",
            function(e, t) {
                n.$apply(function() {
                    h(n, {
                        $event: t || e
                    })
                })
            }),
            r.on("mousedown",
            function(e) {
                r.addClass(m)
            }),
            r.on("mousemove mouseup",
            function(e) {
                r.removeClass(m)
            })
        }
    }]),
    r("ngSwipeLeft", -1, "swipeleft"),
    r("ngSwipeRight", 1, "swiperight"),
    i("ngSwipeUp", -1, "swipeup"),
    i("ngSwipeDown", 1, "swipedown")
} (window, window.angular),
function(e, t, n) {
    "use strict";
    function r(e, t) {
        return - 1 !== e.indexOf(t, e.length - t.length)
    }
    function i(e, t) {
        return ! e.indexOf(t)
    }
    function o(e) {
        return {
            restrict: "A",
            compile: function(e, t, n) {
                var r = t[this.name].replace(/\s/g, "").match(/^([^(]+?)\s*(\((.*)\))?$/),
                i = /[)]$/.test(t[this.name]) ? {
                    file: ": '" + r[1] + "'",
                    key: r[3]
                }: {
                    file: "",
                    key: r[1]
                };
                return e.text("{{ " + i.key + " | translate" + i.file + " }}"),
                function(e, t, n) {}
            }
        }
    }
    function s() {
        var e, t, n, o, s, a;
        this.langsFiles = function(t) {
            return e = t,
            this
        },
        this.addLangFile = function(t) {
            return e = e ? p(e, t) : t,
            this
        },
        this.langsValues = function(e) {
            return t = e,
            this
        },
        this.setFilesSuffix = function(e) {
            return n = e,
            this
        },
        this.setBaseUrl = function(e) {
            return o = new RegExp(/\/$/).test(e) ? e.substring(0, e.length - 1) : e,
            this
        },
        this.fallbackLanguage = function(e) {
            return s = e,
            this
        },
        this.setDirectory = this.setBaseUrl,
        this.$get = ["$q", "$injector", "staticFilesLoader",
        function(l, c, d) {
            function f(e) {
                return u(e) ? a = e: !1
            }
            function v() {
                return x[a] || x[s]
            }
            function m(e) {
                return x[e] || x[Object.keys(x)[0]]
            }
            function g() {
                return x
            }
            function y(e) {
                h(e,
                function(e, t) {
                    p(x, e)
                })
            }
            function j() {
                var t = [];
                return h(e,
                function(e, o) {
                    t.push(d.get({
                        baseUrl: w.baseUrl,
                        suffix: n,
                        value: i(e, "/") || r(w.baseUrl, "/") ? e: "/" + e,
                        key: o
                    }))
                }),
                l.all(t)
            }
            function b() {
                return h(t || [],
                function(e) {
                    var t = {};
                    t[e] = c.get(e),
                    p(x, t)
                })
            }
            function $() {
                return b() && j().then(y)
            }
            var x = {},
            w = {
                baseUrl: o || "",
                suffix: n,
                langsFiles: e,
                langsValues: t,
                fallbackLanguage: s,
                usedLanguage: a
            };
            return {
                configuration: w,
                get: m,
                getAll: g,
                getUsed: v,
                init: $,
                use: f
            }
        }]
    }
    function a(e, t) {
        function n(e, t) {
            var n = {};
            return n[t] = e,
            n
        }
        function r(r) {
            var i = t.defer();
            return e({
                url: [r.baseUrl, r.value, r.suffix].join(""),
                method: "GET",
                params: ""
            }).success(function(e) {
                i.resolve(n(e, r.key))
            }).error(function(e) {
                i.reject(r.key)
            }),
            i.promise
        }
        return {
            get: r
        }
    }
    var l = t.isUndefined,
    u = t.isString,
    c = t.isObject,
    h = t.forEach,
    p = t.extend;
    t.module("ng-translation", ["ng-translation.filter", "ng-translation.provider", "ng-translation.directive"]).run(["ngTranslation",
    function(e) {
        e.init()
    }]),
    t.module("ng-translation.directive", ["ng-translation.provider"]).directive("ngTranslate", ["$parse", o]),
    t.module("ng-translation.filter", ["ng-translation.provider"]).filter("translate", ["$parse", "$interpolate", "ngTranslation", "$sce",
    function(e, t, n, r) {
        var i = function(i) {
            var o = Array.prototype.slice.call(arguments, 1),
            s = u(o[0]) ? "get": "getUsed",
            a = e(i)(n[s](o[0]));
            return ! o.length || l(a) ? r.trustAsHtml(a || "") : c(o[0]) ? t(a)(o[0] || {}) : c(o[1]) ? t(a)(o[1] || {}) : a
        };
        return i.$stateful = !0,
        i
    }]),
    t.module("ng-translation.provider", ["ng-translation.files-loader"]).provider("ngTranslation", s),
    t.module("ng-translation.files-loader", []).factory("staticFilesLoader", ["$http", "$q", a])
} (window, window.angular),
document.createElement("video"),
document.createElement("audio"),
document.createElement("track");
var vjs = function(e, t, n) {
    var r;
    if ("string" == typeof e) {
        if (0 === e.indexOf("#") && (e = e.slice(1)), vjs.players[e]) return vjs.players[e];
        r = vjs.el(e)
    } else r = e;
    if (!r || !r.nodeName) throw new TypeError("The element or ID supplied is not valid. (videojs)");
    return r.player || new vjs.Player(r, t, n)
},
videojs = vjs;
window.videojs = window.vjs = vjs,
vjs.CDN_VERSION = "4.6",
vjs.ACCESS_PROTOCOL = "https:" == document.location.protocol ? "https://": "http://",
vjs.options = {
    techOrder: ["html5", "flash"],
    html5: {},
    flash: {},
    width: 300,
    height: 150,
    defaultVolume: 0,
    playbackRates: [],
    children: {
        mediaLoader: {},
        posterImage: {},
        textTrackDisplay: {},
        loadingSpinner: {},
        bigPlayButton: {},
        controlBar: {},
        errorDisplay: {}
    },
    notSupportedMessage: '您的计算机未安装最新版本的 Flash Player，请到<a href="http://get.adobe.com/cn/flashplayer/" target="_blank" class="error-flash"> Adobe 官网</a>下载安装。'
},
"GENERATED_CDN_VSN" !== vjs.CDN_VERSION && (videojs.options.flash.swf = vjs.ACCESS_PROTOCOL + "vjs.zencdn.net/" + vjs.CDN_VERSION + "/video-js.swf"),
vjs.players = {},
"function" == typeof define && define.amd ? define([],
function() {
    return videojs
}) : "object" == typeof exports && "object" == typeof module && (module.exports = videojs),
vjs.CoreObject = vjs.CoreObject = function() {},
vjs.CoreObject.extend = function(e) {
    var t, n;
    e = e || {},
    t = e.init || e.init || this.prototype.init || this.prototype.init ||
    function() {},
    n = function() {
        t.apply(this, arguments)
    },
    n.prototype = vjs.obj.create(this.prototype),
    n.prototype.constructor = n,
    n.extend = vjs.CoreObject.extend,
    n.create = vjs.CoreObject.create;
    for (var r in e) e.hasOwnProperty(r) && (n.prototype[r] = e[r]);
    return n
},
vjs.CoreObject.create = function() {
    var e = vjs.obj.create(this.prototype);
    return this.apply(e, arguments),
    e
},
vjs.on = function(e, t, n) {
    var r = vjs.getData(e);
    r.handlers || (r.handlers = {}),
    r.handlers[t] || (r.handlers[t] = []),
    n.guid || (n.guid = vjs.guid++),
    r.handlers[t].push(n),
    r.dispatcher || (r.disabled = !1, r.dispatcher = function(t) {
        if (!r.disabled) {
            t = vjs.fixEvent(t);
            var n = r.handlers[t.type];
            if (n) for (var i = n.slice(0), o = 0, s = i.length; s > o && !t.isImmediatePropagationStopped(); o++) i[o].call(e, t)
        }
    }),
    1 == r.handlers[t].length && (document.addEventListener ? e.addEventListener(t, r.dispatcher, !1) : document.attachEvent && e.attachEvent("on" + t, r.dispatcher))
},
vjs.off = function(e, t, n) {
    if (vjs.hasData(e)) {
        var r = vjs.getData(e);
        if (r.handlers) {
            var i = function(t) {
                r.handlers[t] = [],
                vjs.cleanUpEvents(e, t)
            };
            if (t) {
                var o = r.handlers[t];
                if (o) {
                    if (!n) return void i(t);
                    if (n.guid) for (var s = 0; s < o.length; s++) o[s].guid === n.guid && o.splice(s--, 1);
                    vjs.cleanUpEvents(e, t)
                }
            } else for (var a in r.handlers) i(a)
        }
    }
},
vjs.cleanUpEvents = function(e, t) {
    var n = vjs.getData(e);
    0 === n.handlers[t].length && (delete n.handlers[t], document.removeEventListener ? e.removeEventListener(t, n.dispatcher, !1) : document.detachEvent && e.detachEvent("on" + t, n.dispatcher)),
    vjs.isEmpty(n.handlers) && (delete n.handlers, delete n.dispatcher, delete n.disabled),
    vjs.isEmpty(n) && vjs.removeData(e)
},
vjs.fixEvent = function(e) {
    function t() {
        return ! 0
    }
    function n() {
        return ! 1
    }
    if (!e || !e.isPropagationStopped) {
        var r = e || window.event;
        e = {};
        for (var i in r)"layerX" !== i && "layerY" !== i && "keyboardEvent.keyLocation" !== i && ("returnValue" == i && r.preventDefault || (e[i] = r[i]));
        if (e.target || (e.target = e.srcElement || document), e.relatedTarget = e.fromElement === e.target ? e.toElement: e.fromElement, e.preventDefault = function() {
            r.preventDefault && r.preventDefault(),
            e.returnValue = !1,
            e.isDefaultPrevented = t,
            e.defaultPrevented = !0
        },
        e.isDefaultPrevented = n, e.defaultPrevented = !1, e.stopPropagation = function() {
            r.stopPropagation && r.stopPropagation(),
            e.cancelBubble = !0,
            e.isPropagationStopped = t
        },
        e.isPropagationStopped = n, e.stopImmediatePropagation = function() {
            r.stopImmediatePropagation && r.stopImmediatePropagation(),
            e.isImmediatePropagationStopped = t,
            e.stopPropagation()
        },
        e.isImmediatePropagationStopped = n, null != e.clientX) {
            var o = document.documentElement,
            s = document.body;
            e.pageX = e.clientX + (o && o.scrollLeft || s && s.scrollLeft || 0) - (o && o.clientLeft || s && s.clientLeft || 0),
            e.pageY = e.clientY + (o && o.scrollTop || s && s.scrollTop || 0) - (o && o.clientTop || s && s.clientTop || 0)
        }
        e.which = e.charCode || e.keyCode,
        null != e.button && (e.button = 1 & e.button ? 0 : 4 & e.button ? 1 : 2 & e.button ? 2 : 0)
    }
    return e
},
vjs.trigger = function(e, t) {
    var n = vjs.hasData(e) ? vjs.getData(e) : {},
    r = e.parentNode || e.ownerDocument;
    if ("string" == typeof t && (t = {
        type: t,
        target: e
    }), t = vjs.fixEvent(t), n.dispatcher && n.dispatcher.call(e, t), r && !t.isPropagationStopped() && t.bubbles !== !1) vjs.trigger(r, t);
    else if (!r && !t.defaultPrevented) {
        var i = vjs.getData(t.target);
        t.target[t.type] && (i.disabled = !0, "function" == typeof t.target[t.type] && t.target[t.type](), i.disabled = !1)
    }
    return ! t.defaultPrevented
},
vjs.one = function(e, t, n) {
    var r = function() {
        vjs.off(e, t, r),
        n.apply(this, arguments)
    };
    r.guid = n.guid = n.guid || vjs.guid++,
    vjs.on(e, t, r)
};
var hasOwnProp = Object.prototype.hasOwnProperty;
vjs.createEl = function(e, t) {
    var n, r;
    n = document.createElement(e || "div");
    for (r in t) hasOwnProp.call(t, r) && ( - 1 !== r.indexOf("aria-") || "role" == r ? n.setAttribute(r, t[r]) : n[r] = t[r]);
    return n
},
vjs.capitalize = function(e) {
    return e.charAt(0).toUpperCase() + e.slice(1)
},
vjs.obj = {},
vjs.obj.create = Object.create ||
function(e) {
    function t() {}
    return t.prototype = e,
    new t
},
vjs.obj.each = function(e, t, n) {
    for (var r in e) hasOwnProp.call(e, r) && t.call(n || this, r, e[r])
},
vjs.obj.merge = function(e, t) {
    if (!t) return e;
    for (var n in t) hasOwnProp.call(t, n) && (e[n] = t[n]);
    return e
},
vjs.obj.deepMerge = function(e, t) {
    var n, r, i;
    e = vjs.obj.copy(e);
    for (n in t) hasOwnProp.call(t, n) && (r = e[n], i = t[n], vjs.obj.isPlain(r) && vjs.obj.isPlain(i) ? e[n] = vjs.obj.deepMerge(r, i) : e[n] = t[n]);
    return e
},
vjs.obj.copy = function(e) {
    return vjs.obj.merge({},
    e)
},
vjs.obj.isPlain = function(e) {
    return !! e && "object" == typeof e && "[object Object]" === e.toString() && e.constructor === Object
},
vjs.bind = function(e, t, n) {
    t.guid || (t.guid = vjs.guid++);
    var r = function() {
        return t.apply(e, arguments)
    };
    return r.guid = n ? n + "_" + t.guid: t.guid,
    r
},
vjs.cache = {},
vjs.guid = 1,
vjs.expando = "vdata" + (new Date).getTime(),
vjs.getData = function(e) {
    var t = e[vjs.expando];
    return t || (t = e[vjs.expando] = vjs.guid++, vjs.cache[t] = {}),
    vjs.cache[t]
},
vjs.hasData = function(e) {
    var t = e[vjs.expando];
    return ! (!t || vjs.isEmpty(vjs.cache[t]))
},
vjs.removeData = function(e) {
    var t = e[vjs.expando];
    if (t) {
        delete vjs.cache[t];
        try {
            delete e[vjs.expando]
        } catch(n) {
            e.removeAttribute ? e.removeAttribute(vjs.expando) : e[vjs.expando] = null
        }
    }
},
vjs.isEmpty = function(e) {
    for (var t in e) if (null !== e[t]) return ! 1;
    return ! 0
},
vjs.addClass = function(e, t) { - 1 == (" " + e.className + " ").indexOf(" " + t + " ") && (e.className = "" === e.className ? t: e.className + " " + t)
},
vjs.removeClass = function(e, t) {
    var n, r;
    if ( - 1 != e.className.indexOf(t)) {
        for (n = e.className.split(" "), r = n.length - 1; r >= 0; r--) n[r] === t && n.splice(r, 1);
        e.className = n.join(" ")
    }
},
vjs.TEST_VID = vjs.createEl("video"),
vjs.USER_AGENT = navigator.userAgent,
vjs.IS_IPHONE = /iPhone/i.test(vjs.USER_AGENT),
vjs.IS_IPAD = /iPad/i.test(vjs.USER_AGENT),
vjs.IS_IPOD = /iPod/i.test(vjs.USER_AGENT),
vjs.IS_IOS = vjs.IS_IPHONE || vjs.IS_IPAD || vjs.IS_IPOD,
vjs.IOS_VERSION = function() {
    var e = vjs.USER_AGENT.match(/OS (\d+)_/i);
    return e && e[1] ? e[1] : void 0
} (),
vjs.IS_ANDROID = /Android/i.test(vjs.USER_AGENT),
vjs.ANDROID_VERSION = function() {
    var e, t, n = vjs.USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);
    return n ? (e = n[1] && parseFloat(n[1]), t = n[2] && parseFloat(n[2]), e && t ? parseFloat(n[1] + "." + n[2]) : e ? e: null) : null
} (),
vjs.IS_OLD_ANDROID = vjs.IS_ANDROID && /webkit/i.test(vjs.USER_AGENT) && vjs.ANDROID_VERSION < 2.3,
vjs.IS_FIREFOX = /Firefox/i.test(vjs.USER_AGENT),
vjs.IS_CHROME = /Chrome/i.test(vjs.USER_AGENT),
vjs.TOUCH_ENABLED = !!("ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch),
vjs.getAttributeValues = function(e) {
    var t, n, r, i, o;
    if (t = {},
    n = ",autoplay,controls,loop,muted,default,", e && e.attributes && e.attributes.length > 0) {
        r = e.attributes;
        for (var s = r.length - 1; s >= 0; s--) i = r[s].name,
        o = r[s].value,
        "boolean" != typeof e[i] && -1 === n.indexOf("," + i + ",") || (o = null !== o),
        t[i] = o
    }
    return t
},
vjs.getComputedDimension = function(e, t) {
    var n = "";
    return document.defaultView && document.defaultView.getComputedStyle ? n = document.defaultView.getComputedStyle(e, "").getPropertyValue(t) : e.currentStyle && (n = e["client" + t.substr(0, 1).toUpperCase() + t.substr(1)] + "px"),
    n
},
vjs.insertFirst = function(e, t) {
    t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e)
},
vjs.browser = {},
vjs.el = function(e) {
    return 0 === e.indexOf("#") && (e = e.slice(1)),
    document.getElementById(e)
},
vjs.formatTime = function(e, t) {
    t = t || e;
    var n = Math.floor(e % 60),
    r = Math.floor(e / 60 % 60),
    i = Math.floor(e / 3600),
    o = Math.floor(t / 60 % 60),
    s = Math.floor(t / 3600);
    return (isNaN(e) || e === 1 / 0) && (i = r = n = "-"),
    i = i > 0 || s > 0 ? i + ":": "",
    r = ((i || o >= 10) && 10 > r ? "0" + r: r) + ":",
    n = 10 > n ? "0" + n: n,
    i + r + n
},
vjs.blockTextSelection = function() {
    document.body.focus(),
    document.onselectstart = function() {
        return ! 1
    }
},
vjs.unblockTextSelection = function() {
    document.onselectstart = function() {
        return ! 0
    }
},
vjs.trim = function(e) {
    return (e + "").replace(/^\s+|\s+$/g, "")
},
vjs.round = function(e, t) {
    return t || (t = 0),
    Math.round(e * Math.pow(10, t)) / Math.pow(10, t)
},
vjs.createTimeRange = function(e, t) {
    return {
        length: 1,
        start: function() {
            return e
        },
        end: function() {
            return t
        }
    }
},
vjs.get = function(e, t, n, r) {
    var i, o, s, a, l;
    n = n ||
    function() {},
    "undefined" == typeof XMLHttpRequest && (window.XMLHttpRequest = function() {
        try {
            return new window.ActiveXObject("Msxml2.XMLHTTP.6.0")
        } catch(e) {}
        try {
            return new window.ActiveXObject("Msxml2.XMLHTTP.3.0")
        } catch(t) {}
        try {
            return new window.ActiveXObject("Msxml2.XMLHTTP")
        } catch(n) {}
        throw new Error("This browser does not support XMLHttpRequest.")
    }),
    o = new XMLHttpRequest,
    s = vjs.parseUrl(e),
    a = window.location,
    l = s.protocol + s.host !== a.protocol + a.host,
    !l || !window.XDomainRequest || "withCredentials" in o ? (i = "file:" == s.protocol || "file:" == a.protocol, o.onreadystatechange = function() {
        4 === o.readyState && (200 === o.status || i && 0 === o.status ? t(o.responseText) : n(o.responseText))
    }) : (o = new window.XDomainRequest, o.onload = function() {
        t(o.responseText)
    },
    o.onerror = n, o.onprogress = function() {},
    o.ontimeout = n);
    try {
        o.open("GET", e, !0),
        r && (o.withCredentials = !0)
    } catch(u) {
        return void n(u)
    }
    try {
        o.send()
    } catch(u) {
        n(u)
    }
},
vjs.setLocalStorage = function(e, t) {
    try {
        var n = window.localStorage || !1;
        if (!n) return;
        n[e] = t
    } catch(r) {
        22 == r.code || 1014 == r.code ? vjs.log("LocalStorage Full (VideoJS)", r) : 18 == r.code ? vjs.log("LocalStorage not allowed (VideoJS)", r) : vjs.log("LocalStorage Error (VideoJS)", r)
    }
},
vjs.getAbsoluteURL = function(e) {
    return e.match(/^https?:\/\//) || (e = vjs.createEl("div", {
        innerHTML: '<a href="' + e + '">x</a>'
    }).firstChild.href),
    e
},
vjs.parseUrl = function(e) {
    var t, n, r, i, o;
    i = ["protocol", "hostname", "port", "pathname", "search", "hash", "host"],
    n = vjs.createEl("a", {
        href: e
    }),
    r = "" === n.host && "file:" !== n.protocol,
    r && (t = vjs.createEl("div"), t.innerHTML = '<a href="' + e + '"></a>', n = t.firstChild, t.setAttribute("style", "display:none; position:absolute;"), document.body.appendChild(t)),
    o = {};
    for (var s = 0; s < i.length; s++) o[i[s]] = n[i[s]];
    return r && document.body.removeChild(t),
    o
};
var _noop = function() {},
_console = window.console || {
    log: _noop,
    warn: _noop,
    error: _noop
};
vjs.log = function() {
    _logType(null, arguments)
},
vjs.log.history = [],
vjs.log.error = function() {
    _logType("error", arguments)
},
vjs.log.warn = function() {
    _logType("warn", arguments)
},
vjs.findPosition = function(e) {
    var t, n, r, i, o, s, a, l, u;
    return e.getBoundingClientRect && e.parentNode && (t = e.getBoundingClientRect()),
    t ? (n = document.documentElement, r = document.body, i = n.clientLeft || r.clientLeft || 0, o = window.pageXOffset || r.scrollLeft, s = t.left + o - i, a = n.clientTop || r.clientTop || 0, l = window.pageYOffset || r.scrollTop, u = t.top + l - a, {
        left: vjs.round(s),
        top: vjs.round(u)
    }) : {
        left: 0,
        top: 0
    }
},
vjs.util = {},
vjs.util.mergeOptions = function(e, t) {
    var n, r, i;
    e = vjs.obj.copy(e);
    for (n in t) t.hasOwnProperty(n) && (r = e[n], i = t[n], vjs.obj.isPlain(r) && vjs.obj.isPlain(i) ? e[n] = vjs.util.mergeOptions(r, i) : e[n] = t[n]);
    return e
},
vjs.Component = vjs.CoreObject.extend({
    init: function(e, t, n) {
        this.player_ = e,
        this.options_ = vjs.obj.copy(this.options_),
        t = this.options(t),
        this.id_ = t.id || (t.el && t.el.id ? t.el.id: e.id() + "_component_" + vjs.guid++),
        this.name_ = t.name || null,
        this.el_ = t.el || this.createEl(),
        this.children_ = [],
        this.childIndex_ = {},
        this.childNameIndex_ = {},
        this.initChildren(),
        this.ready(n),
        t.reportTouchActivity !== !1 && this.enableTouchActivity()
    }
}),
vjs.Component.prototype.dispose = function() {
    if (this.trigger({
        type: "dispose",
        bubbles: !1
    }), this.children_) for (var e = this.children_.length - 1; e >= 0; e--) this.children_[e].dispose && this.children_[e].dispose();
    this.children_ = null,
    this.childIndex_ = null,
    this.childNameIndex_ = null,
    this.off(),
    this.el_.parentNode && this.el_.parentNode.removeChild(this.el_),
    vjs.removeData(this.el_),
    this.el_ = null
},
vjs.Component.prototype.player_ = !0,
vjs.Component.prototype.player = function() {
    return this.player_
},
vjs.Component.prototype.options_,
vjs.Component.prototype.options = function(e) {
    return void 0 === e ? this.options_: this.options_ = vjs.util.mergeOptions(this.options_, e)
},
vjs.Component.prototype.el_,
vjs.Component.prototype.createEl = function(e, t) {
    return vjs.createEl(e, t)
},
vjs.Component.prototype.el = function() {
    return this.el_
},
vjs.Component.prototype.contentEl_,
vjs.Component.prototype.contentEl = function() {
    return this.contentEl_ || this.el_
},
vjs.Component.prototype.id_,
vjs.Component.prototype.id = function() {
    return this.id_
},
vjs.Component.prototype.name_,
vjs.Component.prototype.name = function() {
    return this.name_
},
vjs.Component.prototype.children_,
vjs.Component.prototype.children = function() {
    return this.children_
},
vjs.Component.prototype.childIndex_,
vjs.Component.prototype.getChildById = function(e) {
    return this.childIndex_[e]
},
vjs.Component.prototype.childNameIndex_,
vjs.Component.prototype.getChild = function(e) {
    return this.childNameIndex_[e]
},
vjs.Component.prototype.addChild = function(e, t) {
    var n, r, i;
    return "string" == typeof e ? (i = e, t = t || {},
    r = t.componentClass || vjs.capitalize(i), t.name = i, n = new window.videojs[r](this.player_ || this, t)) : n = e,
    this.children_.push(n),
    "function" == typeof n.id && (this.childIndex_[n.id()] = n),
    i = i || n.name && n.name(),
    i && (this.childNameIndex_[i] = n),
    "function" == typeof n.el && n.el() && this.contentEl().appendChild(n.el()),
    n
},
vjs.Component.prototype.removeChild = function(e) {
    if ("string" == typeof e && (e = this.getChild(e)), e && this.children_) {
        for (var t = !1,
        n = this.children_.length - 1; n >= 0; n--) if (this.children_[n] === e) {
            t = !0,
            this.children_.splice(n, 1);
            break
        }
        if (t) {
            this.childIndex_[e.id] = null,
            this.childNameIndex_[e.name] = null;
            var r = e.el();
            r && r.parentNode === this.contentEl() && this.contentEl().removeChild(e.el())
        }
    }
},
vjs.Component.prototype.initChildren = function() {
    var e, t, n, r, i;
    if (e = this, t = this.options().children) if (t instanceof Array) for (var o = 0; o < t.length; o++) n = t[o],
    "string" == typeof n ? (r = n, i = {}) : (r = n.name, i = n),
    e[r] = e.addChild(r, i);
    else vjs.obj.each(t,
    function(t, n) {
        n !== !1 && (e[t] = e.addChild(t, n))
    })
},
vjs.Component.prototype.buildCSSClass = function() {
    return ""
},
vjs.Component.prototype.on = function(e, t) {
    return vjs.on(this.el_, e, vjs.bind(this, t)),
    this
},
vjs.Component.prototype.off = function(e, t) {
    return vjs.off(this.el_, e, t),
    this
},
vjs.Component.prototype.one = function(e, t) {
    return vjs.one(this.el_, e, vjs.bind(this, t)),
    this
},
vjs.Component.prototype.trigger = function(e, t) {
    return vjs.trigger(this.el_, e, t),
    this
},
vjs.Component.prototype.isReady_,
vjs.Component.prototype.isReadyOnInitFinish_ = !0,
vjs.Component.prototype.readyQueue_,
vjs.Component.prototype.ready = function(e) {
    return e && (this.isReady_ ? e.call(this) : (void 0 === this.readyQueue_ && (this.readyQueue_ = []), this.readyQueue_.push(e))),
    this
},
vjs.Component.prototype.triggerReady = function() {
    this.isReady_ = !0;
    var e = this.readyQueue_;
    if (e && e.length > 0) {
        for (var t = 0,
        n = e.length; n > t; t++) e[t].call(this);
        this.readyQueue_ = [],
        this.trigger("ready")
    }
},
vjs.Component.prototype.addClass = function(e) {
    return vjs.addClass(this.el_, e),
    this
},
vjs.Component.prototype.removeClass = function(e) {
    return vjs.removeClass(this.el_, e),
    this
},
vjs.Component.prototype.show = function() {
    return this.el_.style.display = "block",
    this
},
vjs.Component.prototype.hide = function() {
    return this.el_.style.display = "none",
    this
},
vjs.Component.prototype.lockShowing = function() {
    return this.addClass("vjs-lock-showing"),
    this
},
vjs.Component.prototype.unlockShowing = function() {
    return this.removeClass("vjs-lock-showing"),
    this
},
vjs.Component.prototype.disable = function() {
    this.hide(),
    this.show = function() {}
},
vjs.Component.prototype.width = function(e, t) {
    return this.dimension("width", e, t)
},
vjs.Component.prototype.height = function(e, t) {
    return this.dimension("height", e, t)
},
vjs.Component.prototype.dimensions = function(e, t) {
    return this.width(e, !0).height(t)
},
vjs.Component.prototype.dimension = function(e, t, n) {
    if (void 0 !== t) return - 1 !== ("" + t).indexOf("%") || -1 !== ("" + t).indexOf("px") ? this.el_.style[e] = t: "auto" === t ? this.el_.style[e] = "": this.el_.style[e] = t + "px",
    n || this.trigger("resize"),
    this;
    if (!this.el_) return 0;
    var r = this.el_.style[e],
    i = r.indexOf("px");
    return - 1 !== i ? parseInt(r.slice(0, i), 10) : parseInt(this.el_["offset" + vjs.capitalize(e)], 10)
},
vjs.Component.prototype.onResize,
vjs.Component.prototype.emitTapEvents = function() {
    var e, t, n, r, i, o, s, a, l;
    e = 0,
    t = null,
    l = 22,
    this.on("touchstart",
    function(n) {
        1 === n.touches.length && (t = n.touches[0], e = (new Date).getTime(), r = !0)
    }),
    this.on("touchmove",
    function(e) {
        e.touches.length > 1 ? r = !1 : t && (o = e.touches[0].pageX - t.pageX, s = e.touches[0].pageY - t.pageY, a = Math.sqrt(o * o + s * s), a > l && (r = !1))
    }),
    i = function() {
        r = !1
    },
    this.on("touchleave", i),
    this.on("touchcancel", i),
    this.on("touchend",
    function(i) {
        t = null,
        r === !0 && (n = (new Date).getTime() - e, 250 > n && (i.preventDefault(), this.trigger("tap")))
    })
},
vjs.Component.prototype.enableTouchActivity = function() {
    var e, t, n;
    e = vjs.bind(this.player(), this.player().reportUserActivity),
    this.on("touchstart",
    function() {
        e(),
        clearInterval(t),
        t = setInterval(e, 250)
    }),
    n = function(n) {
        e(),
        clearInterval(t)
    },
    this.on("touchmove", e),
    this.on("touchend", n),
    this.on("touchcancel", n)
},
vjs.Button = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t),
        this.emitTapEvents(),
        this.on("tap", this.onClick),
        this.on("click", this.onClick),
        this.on("focus", this.onFocus),
        this.on("blur", this.onBlur)
    }
}),
vjs.Button.prototype.createEl = function(e, t) {
    var n;
    return t = vjs.obj.merge({
        className: this.buildCSSClass(),
        role: "button",
        "aria-live": "polite",
        tabIndex: 0
    },
    t),
    n = vjs.Component.prototype.createEl.call(this, e, t),
    t.innerHTML || (this.contentEl_ = vjs.createEl("div", {
        className: "vjs-control-content"
    }), this.controlText_ = vjs.createEl("span", {
        className: "vjs-control-text",
        innerHTML: this.buttonText || "Need Text"
    }), this.contentEl_.appendChild(this.controlText_), n.appendChild(this.contentEl_)),
    n
},
vjs.Button.prototype.buildCSSClass = function() {
    return "vjs-control " + vjs.Component.prototype.buildCSSClass.call(this)
},
vjs.Button.prototype.onClick = function() {},
vjs.Button.prototype.onFocus = function() {
    vjs.on(document, "keyup", vjs.bind(this, this.onKeyPress))
},
vjs.Button.prototype.onKeyPress = function(e) {
    32 != e.which && 13 != e.which || (e.preventDefault(), this.onClick())
},
vjs.Button.prototype.onBlur = function() {
    vjs.off(document, "keyup", vjs.bind(this, this.onKeyPress))
},
vjs.Slider = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t),
        this.bar = this.getChild(this.options_.barName),
        this.handle = this.getChild(this.options_.handleName),
        this.on("mousedown", this.onMouseDown),
        this.on("touchstart", this.onMouseDown),
        this.on("focus", this.onFocus),
        this.on("blur", this.onBlur),
        this.on("click", this.onClick),
        this.player_.on("controlsvisible", vjs.bind(this, this.update)),
        e.on(this.playerEvent, vjs.bind(this, this.update)),
        e.on("fullscreenchange", vjs.bind(this, this.update)),
        this.boundEvents = {}
    }
}),
vjs.Slider.prototype.createEl = function(e, t) {
    return t = t || {},
    t.className = t.className + " vjs-slider",
    t = vjs.obj.merge({
        role: "slider",
        "aria-valuenow": 0,
        "aria-valuemin": 0,
        "aria-valuemax": 100,
        tabIndex: 0
    },
    t),
    vjs.Component.prototype.createEl.call(this, e, t)
},
vjs.Slider.prototype.onMouseDown = function(e) {
    e.preventDefault(),
    vjs.blockTextSelection(),
    this.boundEvents.move = vjs.bind(this, this.onMouseMove),
    this.boundEvents.end = vjs.bind(this, this.onMouseUp),
    vjs.on(document, "mousemove", this.boundEvents.move),
    vjs.on(document, "mouseup", this.boundEvents.end),
    vjs.on(document, "touchmove", this.boundEvents.move),
    vjs.on(document, "touchend", this.boundEvents.end),
    this.onMouseMove(e)
},
vjs.Slider.prototype.onMouseUp = function() {
    vjs.unblockTextSelection(),
    vjs.off(document, "mousemove", this.boundEvents.move, !1),
    vjs.off(document, "mouseup", this.boundEvents.end, !1),
    vjs.off(document, "touchmove", this.boundEvents.move, !1),
    vjs.off(document, "touchend", this.boundEvents.end, !1),
    this.update()
},
vjs.Slider.prototype.update = function() {
    if (this.el_) {
        var e, t = this.getPercent(),
        n = this.handle,
        r = this.bar;
        if (isNaN(t) && (t = 0), e = t, n) {
            var i = this.el_,
            o = i.offsetWidth,
            s = n.el().offsetWidth,
            a = s ? s / o: 0,
            l = 1 - a,
            u = t * l;
            e = u + a / 2,
            n.el().style.left = vjs.round(100 * u, 2) + "%"
        }
        r.el().style.width = vjs.round(100 * e, 2) + "%"
    }
},
vjs.Slider.prototype.calculateDistance = function(e) {
    var t, n, r, i, o, s, a, l, u;
    if (t = this.el_, n = vjs.findPosition(t), o = s = t.offsetWidth, a = this.handle, this.options_.vertical) {
        if (i = n.top, u = e.changedTouches ? e.changedTouches[0].pageY: e.pageY, a) {
            var c = a.el().offsetHeight;
            i += c / 2,
            s -= c
        }
        return Math.max(0, Math.min(1, (i - u + s) / s))
    }
    if (r = n.left, l = e.changedTouches ? e.changedTouches[0].pageX: e.pageX, a) {
        var h = a.el().offsetWidth;
        r += h / 2,
        o -= h
    }
    return Math.max(0, Math.min(1, (l - r) / o))
},
vjs.Slider.prototype.onFocus = function() {
    vjs.on(document, "keyup", vjs.bind(this, this.onKeyPress))
},
vjs.Slider.prototype.onKeyPress = function(e) {
    37 == e.which ? (e.preventDefault(), this.stepBack()) : 39 == e.which && (e.preventDefault(), this.stepForward())
},
vjs.Slider.prototype.onBlur = function() {
    vjs.off(document, "keyup", vjs.bind(this, this.onKeyPress))
},
vjs.Slider.prototype.onClick = function(e) {
    e.stopImmediatePropagation(),
    e.preventDefault()
},
vjs.SliderHandle = vjs.Component.extend(),
vjs.SliderHandle.prototype.defaultValue = 0,
vjs.SliderHandle.prototype.createEl = function(e, t) {
    return t = t || {},
    t.className = t.className + " vjs-slider-handle",
    t = vjs.obj.merge({
        innerHTML: '<span class="vjs-control-text">' + this.defaultValue + "</span>"
    },
    t),
    vjs.Component.prototype.createEl.call(this, "div", t)
},
vjs.Menu = vjs.Component.extend(),
vjs.Menu.prototype.addItem = function(e) {
    this.addChild(e),
    e.on("click", vjs.bind(this,
    function() {
        this.unlockShowing()
    }))
},
vjs.Menu.prototype.createEl = function() {
    var e = this.options().contentElType || "ul";
    this.contentEl_ = vjs.createEl(e, {
        className: "vjs-menu-content"
    });
    var t = vjs.Component.prototype.createEl.call(this, "div", {
        append: this.contentEl_,
        className: "vjs-menu"
    });
    return t.appendChild(this.contentEl_),
    vjs.on(t, "click",
    function(e) {
        e.preventDefault(),
        e.stopImmediatePropagation()
    }),
    t
},
vjs.MenuItem = vjs.Button.extend({
    init: function(e, t) {
        vjs.Button.call(this, e, t),
        this.selected(t.selected)
    }
}),
vjs.MenuItem.prototype.createEl = function(e, t) {
    return vjs.Button.prototype.createEl.call(this, "li", vjs.obj.merge({
        className: "vjs-menu-item",
        innerHTML: this.options_.label
    },
    t))
},
vjs.MenuItem.prototype.onClick = function() {
    this.selected(!0)
},
vjs.MenuItem.prototype.selected = function(e) {
    e ? (this.addClass("vjs-selected"), this.el_.setAttribute("aria-selected", !0)) : (this.removeClass("vjs-selected"), this.el_.setAttribute("aria-selected", !1))
},
vjs.MenuButton = vjs.Button.extend({
    init: function(e, t) {
        vjs.Button.call(this, e, t),
        this.menu = this.createMenu(),
        this.addChild(this.menu),
        this.items && 0 === this.items.length && this.hide(),
        this.on("keyup", this.onKeyPress),
        this.el_.setAttribute("aria-haspopup", !0),
        this.el_.setAttribute("role", "button")
    }
}),
vjs.MenuButton.prototype.buttonPressed_ = !1,
vjs.MenuButton.prototype.createMenu = function() {
    var e = new vjs.Menu(this.player_);
    if (this.options().title && e.contentEl().appendChild(vjs.createEl("li", {
        className: "vjs-menu-title",
        innerHTML: vjs.capitalize(this.options().title),
        tabindex: -1
    })), this.items = this.createItems(), this.items) for (var t = 0; t < this.items.length; t++) e.addItem(this.items[t]);
    return e
},
vjs.MenuButton.prototype.createItems = function() {},
vjs.MenuButton.prototype.buildCSSClass = function() {
    return this.className + " vjs-menu-button " + vjs.Button.prototype.buildCSSClass.call(this)
},
vjs.MenuButton.prototype.onFocus = function() {},
vjs.MenuButton.prototype.onBlur = function() {},
vjs.MenuButton.prototype.onClick = function() {
    this.one("mouseout", vjs.bind(this,
    function() {
        this.menu.unlockShowing(),
        this.el_.blur()
    })),
    this.buttonPressed_ ? this.unpressButton() : this.pressButton()
},
vjs.MenuButton.prototype.onKeyPress = function(e) {
    e.preventDefault(),
    32 == e.which || 13 == e.which ? this.buttonPressed_ ? this.unpressButton() : this.pressButton() : 27 == e.which && this.buttonPressed_ && this.unpressButton();
},
vjs.MenuButton.prototype.pressButton = function() {
    this.buttonPressed_ = !0,
    this.menu.lockShowing(),
    this.el_.setAttribute("aria-pressed", !0),
    this.items && this.items.length > 0 && this.items[0].el().focus()
},
vjs.MenuButton.prototype.unpressButton = function() {
    this.buttonPressed_ = !1,
    this.menu.unlockShowing(),
    this.el_.setAttribute("aria-pressed", !1)
},
vjs.MediaError = function(e) {
    "number" == typeof e ? this.code = e: "string" == typeof e ? this.message = e: "object" == typeof e && vjs.obj.merge(this, e),
    this.message || (this.message = vjs.MediaError.defaultMessages[this.code] || "")
},
vjs.MediaError.prototype.code = 0,
vjs.MediaError.prototype.message = "",
vjs.MediaError.prototype.status = null,
vjs.MediaError.errorTypes = ["MEDIA_ERR_CUSTOM", "MEDIA_ERR_ABORTED", "MEDIA_ERR_NETWORK", "MEDIA_ERR_DECODE", "MEDIA_ERR_SRC_NOT_SUPPORTED", "MEDIA_ERR_ENCRYPTED"],
vjs.MediaError.defaultMessages = {
    1 : "You aborted the video playback",
    2 : "A network error caused the video download to fail part-way.",
    3 : "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.",
    4 : "The video could not be loaded, either because the server or network failed or because the format is not supported.",
    5 : "The video is encrypted and we do not have the keys to decrypt it."
};
for (var errNum = 0; errNum < vjs.MediaError.errorTypes.length; errNum++) vjs.MediaError[vjs.MediaError.errorTypes[errNum]] = errNum,
vjs.MediaError.prototype[vjs.MediaError.errorTypes[errNum]] = errNum; !
function() {
    var e, t, n, r;
    for (vjs.browser.fullscreenAPI, e = [["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror"], ["webkitRequestFullscreen", "webkitExitFullscreen", "webkitFullscreenElement", "webkitFullscreenEnabled", "webkitfullscreenchange", "webkitfullscreenerror"], ["webkitRequestFullScreen", "webkitCancelFullScreen", "webkitCurrentFullScreenElement", "webkitCancelFullScreen", "webkitfullscreenchange", "webkitfullscreenerror"], ["mozRequestFullScreen", "mozCancelFullScreen", "mozFullScreenElement", "mozFullScreenEnabled", "mozfullscreenchange", "mozfullscreenerror"], ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError"]], t = e[0], r = 0; r < e.length; r++) if (e[r][1] in document) {
        n = e[r];
        break
    }
    if (n) for (vjs.browser.fullscreenAPI = {},
    r = 0; r < n.length; r++) vjs.browser.fullscreenAPI[t[r]] = n[r]
} (),
vjs.Player = vjs.Component.extend({
    init: function(e, t, n) {
        this.tag = e,
        e.id = e.id || "vjs_video_" + vjs.guid++,
        t = vjs.obj.merge(this.getTagSettings(e), t),
        this.cache_ = {},
        this.poster_ = t.poster,
        this.controls_ = t.controls,
        e.controls = !1,
        t.reportTouchActivity = !1,
        this.ready(function() {
            this.on("loadstart", this.onLoadStart),
            this.on("ended", this.onEnded),
            this.on("play", this.onPlay),
            this.on("firstplay", this.onFirstPlay),
            this.on("pause", this.onPause),
            this.on("progress", this.onProgress),
            this.on("durationchange", this.onDurationChange),
            this.on("fullscreenchange", this.onFullscreenChange)
        }),
        vjs.Component.call(this, this, t, n),
        this.controls() ? this.addClass("vjs-controls-enabled") : this.addClass("vjs-controls-disabled"),
        vjs.players[this.id_] = this,
        t.plugins && vjs.obj.each(t.plugins,
        function(e, t) {
            this[e](t)
        },
        this),
        this.listenForUserActivity()
    }
}),
vjs.Player.prototype.options_ = vjs.options,
vjs.Player.prototype.dispose = function() {
    this.trigger("dispose"),
    this.off("dispose"),
    vjs.players[this.id_] = null,
    this.tag && this.tag.player && (this.tag.player = null),
    this.el_ && this.el_.player && (this.el_.player = null),
    this.stopTrackingProgress(),
    this.stopTrackingCurrentTime(),
    this.tech && this.tech.dispose(),
    vjs.Component.prototype.dispose.call(this)
},
vjs.Player.prototype.getTagSettings = function(e) {
    var t = {
        sources: [],
        tracks: []
    };
    if (vjs.obj.merge(t, vjs.getAttributeValues(e)), e.hasChildNodes()) {
        var n, r, i, o, s;
        for (n = e.childNodes, o = 0, s = n.length; s > o; o++) r = n[o],
        i = r.nodeName.toLowerCase(),
        "source" === i ? t.sources.push(vjs.getAttributeValues(r)) : "track" === i && t.tracks.push(vjs.getAttributeValues(r))
    }
    return t
},
vjs.Player.prototype.createEl = function() {
    var e = this.el_ = vjs.Component.prototype.createEl.call(this, "div"),
    t = this.tag;
    if (t.removeAttribute("width"), t.removeAttribute("height"), t.hasChildNodes()) {
        var n, r, i, o, s, a;
        for (n = t.childNodes, r = n.length, a = []; r--;) o = n[r],
        s = o.nodeName.toLowerCase(),
        "track" === s && a.push(o);
        for (i = 0; i < a.length; i++) t.removeChild(a[i])
    }
    return e.id = t.id,
    e.className = t.className,
    t.id += "_html5_api",
    t.className = "vjs-tech",
    t.player = e.player = this,
    this.addClass("vjs-paused"),
    this.width(this.options_.width, !0),
    this.height(this.options_.height, !0),
    t.parentNode && t.parentNode.insertBefore(e, t),
    vjs.insertFirst(t, e),
    e
},
vjs.Player.prototype.loadTech = function(e, t) {
    this.tech && this.unloadTech(),
    "Html5" !== e && this.tag && (vjs.Html5.disposeMediaElement(this.tag), this.tag = null),
    this.techName = e,
    this.isReady_ = !1;
    var n = function() {
        this.player_.triggerReady(),
        this.features.progressEvents || this.player_.manualProgressOn(),
        this.features.timeupdateEvents || this.player_.manualTimeUpdatesOn()
    },
    r = vjs.obj.merge({
        source: t,
        parentEl: this.el_
    },
    this.options_[e.toLowerCase()]);
    t && (t.src == this.cache_.src && this.cache_.currentTime > 0 && (r.startTime = this.cache_.currentTime), this.cache_.src = t.src),
    this.tech = new window.videojs[e](this, r),
    this.tech.ready(n)
},
vjs.Player.prototype.unloadTech = function() {
    this.isReady_ = !1,
    this.tech.dispose(),
    this.manualProgress && this.manualProgressOff(),
    this.manualTimeUpdates && this.manualTimeUpdatesOff(),
    this.tech = !1
},
vjs.Player.prototype.manualProgressOn = function() {
    this.manualProgress = !0,
    this.trackProgress(),
    this.tech && this.tech.one("progress",
    function() {
        this.features.progressEvents = !0,
        this.player_.manualProgressOff()
    })
},
vjs.Player.prototype.manualProgressOff = function() {
    this.manualProgress = !1,
    this.stopTrackingProgress()
},
vjs.Player.prototype.trackProgress = function() {
    this.progressInterval = setInterval(vjs.bind(this,
    function() {
        this.cache_.bufferEnd < this.buffered().end(0) ? this.trigger("progress") : 1 == this.bufferedPercent() && (this.stopTrackingProgress(), this.trigger("progress"))
    }), 500)
},
vjs.Player.prototype.stopTrackingProgress = function() {
    clearInterval(this.progressInterval)
},
vjs.Player.prototype.manualTimeUpdatesOn = function() {
    this.manualTimeUpdates = !0,
    this.on("play", this.trackCurrentTime),
    this.on("pause", this.stopTrackingCurrentTime),
    this.tech && this.tech.one("timeupdate",
    function() {
        this.features.timeupdateEvents = !0,
        this.player_.manualTimeUpdatesOff()
    })
},
vjs.Player.prototype.manualTimeUpdatesOff = function() {
    this.manualTimeUpdates = !1,
    this.stopTrackingCurrentTime(),
    this.off("play", this.trackCurrentTime),
    this.off("pause", this.stopTrackingCurrentTime)
},
vjs.Player.prototype.trackCurrentTime = function() {
    this.currentTimeInterval && this.stopTrackingCurrentTime(),
    this.currentTimeInterval = setInterval(vjs.bind(this,
    function() {
        this.trigger("timeupdate")
    }), 250)
},
vjs.Player.prototype.stopTrackingCurrentTime = function() {
    clearInterval(this.currentTimeInterval),
    this.trigger("timeupdate")
},
vjs.Player.prototype.onLoadStart = function() {
    this.off("play", initFirstPlay),
    this.one("play", initFirstPlay),
    this.error() && this.error(null),
    vjs.removeClass(this.el_, "vjs-has-started")
},
vjs.Player.prototype.onLoadedMetaData,
vjs.Player.prototype.onLoadedData,
vjs.Player.prototype.onLoadedAllData,
vjs.Player.prototype.onPlay = function() {
    vjs.removeClass(this.el_, "vjs-paused"),
    vjs.addClass(this.el_, "vjs-playing")
},
vjs.Player.prototype.onFirstPlay = function() {
    this.options_.starttime && this.currentTime(this.options_.starttime),
    this.addClass("vjs-has-started")
},
vjs.Player.prototype.onPause = function() {
    vjs.removeClass(this.el_, "vjs-playing"),
    vjs.addClass(this.el_, "vjs-paused")
},
vjs.Player.prototype.onTimeUpdate,
vjs.Player.prototype.onProgress = function() {
    1 == this.bufferedPercent() && this.trigger("loadedalldata")
},
vjs.Player.prototype.onEnded = function() {
    this.options_.loop && (this.currentTime(0), this.play())
},
vjs.Player.prototype.onDurationChange = function() {
    var e = this.techGet("duration");
    e && (0 > e && (e = 1 / 0), this.duration(e), e === 1 / 0 ? this.addClass("vjs-live") : this.removeClass("vjs-live"))
},
vjs.Player.prototype.onVolumeChange,
vjs.Player.prototype.onFullscreenChange = function() {
    this.isFullscreen() ? this.addClass("vjs-fullscreen") : this.removeClass("vjs-fullscreen")
},
vjs.Player.prototype.cache_,
vjs.Player.prototype.getCache = function() {
    return this.cache_
},
vjs.Player.prototype.techCall = function(e, t) {
    if (this.tech && !this.tech.isReady_) this.tech.ready(function() {
        this[e](t)
    });
    else try {
        this.tech[e](t)
    } catch(n) {
        throw vjs.log(n),
        n
    }
},
vjs.Player.prototype.techGet = function(e) {
    if (this.tech && this.tech.isReady_) try {
        return this.tech[e]()
    } catch(t) {
        throw void 0 === this.tech[e] ? vjs.log("Video.js: " + e + " method not defined for " + this.techName + " playback technology.", t) : "TypeError" == t.name ? (vjs.log("Video.js: " + e + " unavailable on " + this.techName + " playback technology element.", t), this.tech.isReady_ = !1) : vjs.log(t),
        t
    }
},
vjs.Player.prototype.play = function() {
    return this.techCall("play"),
    this
},
vjs.Player.prototype.pause = function() {
    return this.techCall("pause"),
    this
},
vjs.Player.prototype.paused = function() {
    return this.techGet("paused") !== !1
},
vjs.Player.prototype.currentTime = function(e) {
    return void 0 !== e ? (this.techCall("setCurrentTime", e), this.manualTimeUpdates && this.trigger("timeupdate"), this) : this.cache_.currentTime = this.techGet("currentTime") || 0
},
vjs.Player.prototype.duration = function(e) {
    return void 0 !== e ? (this.cache_.duration = parseFloat(e), this) : (void 0 === this.cache_.duration && this.onDurationChange(), this.cache_.duration || 0)
},
vjs.Player.prototype.remainingTime = function() {
    return this.duration() - this.currentTime()
},
vjs.Player.prototype.buffered = function() {
    var e = this.techGet("buffered"),
    t = 0,
    n = e.length - 1,
    r = this.cache_.bufferEnd = this.cache_.bufferEnd || 0;
    return e && n >= 0 && e.end(n) !== r && (r = e.end(n), this.cache_.bufferEnd = r),
    vjs.createTimeRange(t, r)
},
vjs.Player.prototype.bufferedPercent = function() {
    return this.duration() ? this.buffered().end(0) / this.duration() : 0
},
vjs.Player.prototype.volume = function(e) {
    var t;
    return void 0 !== e ? (t = Math.max(0, Math.min(1, parseFloat(e))), this.cache_.volume = t, this.techCall("setVolume", t), vjs.setLocalStorage("volume", t), this) : (t = parseFloat(this.techGet("volume")), isNaN(t) ? 1 : t)
},
vjs.Player.prototype.muted = function(e) {
    return void 0 !== e ? (this.techCall("setMuted", e), this) : this.techGet("muted") || !1
},
vjs.Player.prototype.supportsFullScreen = function() {
    return this.techGet("supportsFullScreen") || !1
},
vjs.Player.prototype.isFullscreen_ = !1,
vjs.Player.prototype.isFullscreen = function(e) {
    return void 0 !== e ? (this.isFullscreen_ = !!e, this) : this.isFullscreen_
},
vjs.Player.prototype.isFullScreen = function(e) {
    return vjs.log.warn('player.isFullScreen() has been deprecated, use player.isFullscreen() with a lowercase "s")'),
    this.isFullscreen(e)
},
vjs.Player.prototype.requestFullscreen = function() {
    var e = vjs.browser.fullscreenAPI;
    return this.isFullscreen(!0),
    e ? (vjs.on(document, e.fullscreenchange, vjs.bind(this,
    function(t) {
        this.isFullscreen(document[e.fullscreenElement]),
        this.isFullscreen() === !1 && vjs.off(document, e.fullscreenchange, arguments.callee),
        this.trigger("fullscreenchange")
    })), this.el_[e.requestFullscreen]()) : this.tech.supportsFullScreen() ? this.techCall("enterFullScreen") : (this.enterFullWindow(), this.trigger("fullscreenchange")),
    this
},
vjs.Player.prototype.requestFullScreen = function() {
    return vjs.log.warn('player.requestFullScreen() has been deprecated, use player.requestFullscreen() with a lowercase "s")'),
    this.requestFullscreen()
},
vjs.Player.prototype.exitFullscreen = function() {
    var e = vjs.browser.fullscreenAPI;
    return this.isFullscreen(!1),
    e ? document[e.exitFullscreen]() : this.tech.supportsFullScreen() ? this.techCall("exitFullScreen") : (this.exitFullWindow(), this.trigger("fullscreenchange")),
    this
},
vjs.Player.prototype.cancelFullScreen = function() {
    return vjs.log.warn("player.cancelFullScreen() has been deprecated, use player.exitFullscreen()"),
    this.exitFullscreen()
},
vjs.Player.prototype.enterFullWindow = function() {
    this.isFullWindow = !0,
    this.docOrigOverflow = document.documentElement.style.overflow,
    vjs.on(document, "keydown", vjs.bind(this, this.fullWindowOnEscKey)),
    document.documentElement.style.overflow = "hidden",
    vjs.addClass(document.body, "vjs-full-window"),
    this.trigger("enterFullWindow")
},
vjs.Player.prototype.fullWindowOnEscKey = function(e) {
    27 === e.keyCode && (this.isFullscreen() === !0 ? this.exitFullscreen() : this.exitFullWindow())
},
vjs.Player.prototype.exitFullWindow = function() {
    this.isFullWindow = !1,
    vjs.off(document, "keydown", this.fullWindowOnEscKey),
    document.documentElement.style.overflow = this.docOrigOverflow,
    vjs.removeClass(document.body, "vjs-full-window"),
    this.trigger("exitFullWindow")
},
vjs.Player.prototype.selectSource = function(e) {
    for (var t = 0,
    n = this.options_.techOrder; t < n.length; t++) {
        var r = vjs.capitalize(n[t]),
        i = window.videojs[r];
        if (i) {
            if (i.isSupported()) for (var o = 0,
            s = e; o < s.length; o++) {
                var a = s[o];
                if (i.canPlaySource(a)) return {
                    source: a,
                    tech: r
                }
            }
        } else vjs.log.error('The "' + r + '" tech is undefined. Skipped browser support check for that tech.')
    }
    return ! 1
},
vjs.Player.prototype.src = function(e) {
    if (void 0 === e) return this.techGet("src");
    if (e instanceof Array) {
        var t, n = this.selectSource(e);
        n ? (e = n.source, t = n.tech, t == this.techName ? this.src(e) : this.loadTech(t, e)) : (this.error({
            code: 4,
            message: this.options().notSupportedMessage
        }), this.triggerReady())
    } else e instanceof Object ? window.videojs[this.techName].canPlaySource(e) ? this.src(e.src) : this.src([e]) : (this.cache_.src = e, this.isReady_ ? (this.techCall("src", e), "auto" == this.options_.preload && this.load(), this.options_.autoplay && this.play()) : this.ready(function() {
        this.src(e)
    }));
    return this
},
vjs.Player.prototype.load = function() {
    return this.techCall("load"),
    this
},
vjs.Player.prototype.currentSrc = function() {
    return this.techGet("currentSrc") || this.cache_.src || ""
},
vjs.Player.prototype.preload = function(e) {
    return void 0 !== e ? (this.techCall("setPreload", e), this.options_.preload = e, this) : this.techGet("preload")
},
vjs.Player.prototype.autoplay = function(e) {
    return void 0 !== e ? (this.techCall("setAutoplay", e), this.options_.autoplay = e, this) : this.techGet("autoplay", e)
},
vjs.Player.prototype.loop = function(e) {
    return void 0 !== e ? (this.techCall("setLoop", e), this.options_.loop = e, this) : this.techGet("loop")
},
vjs.Player.prototype.poster_,
vjs.Player.prototype.poster = function(e) {
    return void 0 === e ? this.poster_: (this.poster_ = e, this.techCall("setPoster", e), void this.trigger("posterchange"))
},
vjs.Player.prototype.controls_,
vjs.Player.prototype.controls = function(e) {
    return void 0 !== e ? (e = !!e, this.controls_ !== e && (this.controls_ = e, e ? (this.removeClass("vjs-controls-disabled"), this.addClass("vjs-controls-enabled"), this.trigger("controlsenabled")) : (this.removeClass("vjs-controls-enabled"), this.addClass("vjs-controls-disabled"), this.trigger("controlsdisabled"))), this) : this.controls_
},
vjs.Player.prototype.usingNativeControls_,
vjs.Player.prototype.usingNativeControls = function(e) {
    return void 0 !== e ? (e = !!e, this.usingNativeControls_ !== e && (this.usingNativeControls_ = e, e ? (this.addClass("vjs-using-native-controls"), this.trigger("usingnativecontrols")) : (this.removeClass("vjs-using-native-controls"), this.trigger("usingcustomcontrols"))), this) : this.usingNativeControls_
},
vjs.Player.prototype.error_ = null,
vjs.Player.prototype.error = function(e) {
    return void 0 === e ? this.error_: null === e ? (this.error_ = e, this.removeClass("vjs-error"), this) : (e instanceof vjs.MediaError ? this.error_ = e: this.error_ = new vjs.MediaError(e), this.trigger("error"), this.addClass("vjs-error"), vjs.log.error("(CODE:" + this.error_.code + " " + vjs.MediaError.errorTypes[this.error_.code] + ")", this.error_.message, this.error_), this)
},
vjs.Player.prototype.ended = function() {
    return this.techGet("ended")
},
vjs.Player.prototype.seeking = function() {
    return this.techGet("seeking")
},
vjs.Player.prototype.userActivity_ = !0,
vjs.Player.prototype.reportUserActivity = function(e) {
    this.userActivity_ = !0
},
vjs.Player.prototype.userActive_ = !0,
vjs.Player.prototype.userActive = function(e) {
    return void 0 !== e ? (e = !!e, e !== this.userActive_ && (this.userActive_ = e, e ? (this.userActivity_ = !0, this.removeClass("vjs-user-inactive"), this.addClass("vjs-user-active"), this.trigger("useractive")) : (this.userActivity_ = !1, this.tech && this.tech.one("mousemove",
    function(e) {
        e.stopPropagation(),
        e.preventDefault()
    }), this.removeClass("vjs-user-active"), this.addClass("vjs-user-inactive"), this.trigger("userinactive"))), this) : this.userActive_
},
vjs.Player.prototype.listenForUserActivity = function() {
    var e, t, n, r, i, o, s, a, l;
    e = vjs.bind(this, this.reportUserActivity),
    t = function(t) {
        t.screenX == a && t.screenY == l || (a = t.screenX, l = t.screenY, e())
    },
    n = function() {
        e(),
        clearInterval(r),
        r = setInterval(e, 250)
    },
    i = function(t) {
        e(),
        clearInterval(r)
    },
    this.on("mousedown", n),
    this.on("mousemove", t),
    this.on("mouseup", i),
    this.on("keydown", e),
    this.on("keyup", e),
    o = setInterval(vjs.bind(this,
    function() {
        this.userActivity_ && (this.userActivity_ = !1, this.userActive(!0), clearTimeout(s), s = setTimeout(vjs.bind(this,
        function() {
            this.userActivity_ || this.userActive(!1)
        }), 2e3))
    }), 250),
    this.on("dispose",
    function() {
        clearInterval(o),
        clearTimeout(s)
    })
},
vjs.Player.prototype.playbackRate = function(e) {
    return void 0 !== e ? (this.techCall("setPlaybackRate", e), this) : this.tech && this.tech.features && this.tech.features.playbackRate ? this.techGet("playbackRate") : 1
},
vjs.ControlBar = vjs.Component.extend(),
vjs.ControlBar.prototype.options_ = {
    loadEvent: "play",
    children: {
        playToggle: {},
        currentTimeDisplay: {},
        timeDivider: {},
        durationDisplay: {},
        remainingTimeDisplay: {},
        liveDisplay: {},
        progressControl: {},
        fullscreenToggle: {},
        volumeControl: {},
        muteToggle: {},
        playbackRateMenuButton: {}
    }
},
vjs.ControlBar.prototype.createEl = function() {
    return vjs.createEl("div", {
        className: "vjs-control-bar"
    })
},
vjs.LiveDisplay = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t)
    }
}),
vjs.LiveDisplay.prototype.createEl = function() {
    var e = vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-live-controls vjs-control"
    });
    return this.contentEl_ = vjs.createEl("div", {
        className: "vjs-live-display",
        innerHTML: '<span class="vjs-control-text">Stream Type </span>LIVE',
        "aria-live": "off"
    }),
    e.appendChild(this.contentEl_),
    e
},
vjs.PlayToggle = vjs.Button.extend({
    init: function(e, t) {
        vjs.Button.call(this, e, t),
        e.on("play", vjs.bind(this, this.onPlay)),
        e.on("pause", vjs.bind(this, this.onPause))
    }
}),
vjs.PlayToggle.prototype.buttonText = "Play",
vjs.PlayToggle.prototype.buildCSSClass = function() {
    return "vjs-play-control " + vjs.Button.prototype.buildCSSClass.call(this)
},
vjs.PlayToggle.prototype.onClick = function() {
    this.player_.paused() ? this.player_.play() : this.player_.pause()
},
vjs.PlayToggle.prototype.onPlay = function() {
    vjs.removeClass(this.el_, "vjs-paused"),
    vjs.addClass(this.el_, "vjs-playing"),
    this.el_.children[0].children[0].innerHTML = "Pause"
},
vjs.PlayToggle.prototype.onPause = function() {
    vjs.removeClass(this.el_, "vjs-playing"),
    vjs.addClass(this.el_, "vjs-paused"),
    this.el_.children[0].children[0].innerHTML = "Play"
},
vjs.CurrentTimeDisplay = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t),
        e.on("timeupdate", vjs.bind(this, this.updateContent))
    }
}),
vjs.CurrentTimeDisplay.prototype.createEl = function() {
    var e = vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-current-time vjs-time-controls vjs-control"
    });
    return this.contentEl_ = vjs.createEl("div", {
        className: "vjs-current-time-display",
        innerHTML: '<span class="vjs-control-text">Current Time </span>0:00',
        "aria-live": "off"
    }),
    e.appendChild(this.contentEl_),
    e
},
vjs.CurrentTimeDisplay.prototype.updateContent = function() {
    var e = this.player_.scrubbing ? this.player_.getCache().currentTime: this.player_.currentTime();
    this.contentEl_.innerHTML = '<span class="vjs-control-text">Current Time </span>' + vjs.formatTime(e, this.player_.duration())
},
vjs.DurationDisplay = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t),
        e.on("timeupdate", vjs.bind(this, this.updateContent))
    }
}),
vjs.DurationDisplay.prototype.createEl = function() {
    var e = vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-duration vjs-time-controls vjs-control"
    });
    return this.contentEl_ = vjs.createEl("div", {
        className: "vjs-duration-display",
        innerHTML: '<span class="vjs-control-text">Duration Time </span>0:00',
        "aria-live": "off"
    }),
    e.appendChild(this.contentEl_),
    e
},
vjs.DurationDisplay.prototype.updateContent = function() {
    var e = this.player_.duration();
    e && (this.contentEl_.innerHTML = '<span class="vjs-control-text">Duration Time </span>' + vjs.formatTime(e))
},
vjs.TimeDivider = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t)
    }
}),
vjs.TimeDivider.prototype.createEl = function() {
    return vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-time-divider",
        innerHTML: "<div><span>/</span></div>"
    })
},
vjs.RemainingTimeDisplay = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t),
        e.on("timeupdate", vjs.bind(this, this.updateContent))
    }
}),
vjs.RemainingTimeDisplay.prototype.createEl = function() {
    var e = vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-remaining-time vjs-time-controls vjs-control"
    });
    return this.contentEl_ = vjs.createEl("div", {
        className: "vjs-remaining-time-display",
        innerHTML: '<span class="vjs-control-text">Remaining Time </span>-0:00',
        "aria-live": "off"
    }),
    e.appendChild(this.contentEl_),
    e
},
vjs.RemainingTimeDisplay.prototype.updateContent = function() {
    this.player_.duration() && (this.contentEl_.innerHTML = '<span class="vjs-control-text">Remaining Time </span>-' + vjs.formatTime(this.player_.remainingTime()))
},
vjs.FullscreenToggle = vjs.Button.extend({
    init: function(e, t) {
        vjs.Button.call(this, e, t)
    }
}),
vjs.FullscreenToggle.prototype.buttonText = "Fullscreen",
vjs.FullscreenToggle.prototype.buildCSSClass = function() {
    return "vjs-fullscreen-control " + vjs.Button.prototype.buildCSSClass.call(this)
},
vjs.FullscreenToggle.prototype.onClick = function() {
    this.player_.isFullscreen() ? (this.player_.exitFullscreen(), this.controlText_.innerHTML = "Fullscreen") : (this.player_.requestFullscreen(), this.controlText_.innerHTML = "Non-Fullscreen")
},
vjs.ProgressControl = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t)
    }
}),
vjs.ProgressControl.prototype.options_ = {
    children: {
        seekBar: {}
    }
},
vjs.ProgressControl.prototype.createEl = function() {
    return vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-progress-control vjs-control"
    })
},
vjs.SeekBar = vjs.Slider.extend({
    init: function(e, t) {
        vjs.Slider.call(this, e, t),
        e.on("timeupdate", vjs.bind(this, this.updateARIAAttributes)),
        e.ready(vjs.bind(this, this.updateARIAAttributes))
    }
}),
vjs.SeekBar.prototype.options_ = {
    children: {
        loadProgressBar: {},
        playProgressBar: {},
        seekHandle: {}
    },
    barName: "playProgressBar",
    handleName: "seekHandle"
},
vjs.SeekBar.prototype.playerEvent = "timeupdate",
vjs.SeekBar.prototype.createEl = function() {
    return vjs.Slider.prototype.createEl.call(this, "div", {
        className: "vjs-progress-holder",
        "aria-label": "video progress bar"
    })
},
vjs.SeekBar.prototype.updateARIAAttributes = function() {
    var e = this.player_.scrubbing ? this.player_.getCache().currentTime: this.player_.currentTime();
    this.el_.setAttribute("aria-valuenow", vjs.round(100 * this.getPercent(), 2)),
    this.el_.setAttribute("aria-valuetext", vjs.formatTime(e, this.player_.duration()))
},
vjs.SeekBar.prototype.getPercent = function() {
    return this.player_.currentTime() / this.player_.duration()
},
vjs.SeekBar.prototype.onMouseDown = function(e) {
    vjs.Slider.prototype.onMouseDown.call(this, e),
    this.player_.scrubbing = !0,
    this.videoWasPlaying = !this.player_.paused(),
    this.player_.pause()
},
vjs.SeekBar.prototype.onMouseMove = function(e) {
    var t = this.calculateDistance(e) * this.player_.duration();
    t == this.player_.duration() && (t -= .1),
    this.player_.currentTime(t)
},
vjs.SeekBar.prototype.onMouseUp = function(e) {
    vjs.Slider.prototype.onMouseUp.call(this, e),
    this.player_.scrubbing = !1,
    this.videoWasPlaying && this.player_.play()
},
vjs.SeekBar.prototype.stepForward = function() {
    this.player_.currentTime(this.player_.currentTime() + 5)
},
vjs.SeekBar.prototype.stepBack = function() {
    this.player_.currentTime(this.player_.currentTime() - 5)
},
vjs.LoadProgressBar = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t),
        e.on("progress", vjs.bind(this, this.update))
    }
}),
vjs.LoadProgressBar.prototype.createEl = function() {
    return vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-load-progress",
        innerHTML: '<span class="vjs-control-text">Loaded: 0%</span>'
    })
},
vjs.LoadProgressBar.prototype.update = function() {
    this.el_.style && (this.el_.style.width = vjs.round(100 * this.player_.bufferedPercent(), 2) + "%")
},
vjs.PlayProgressBar = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t)
    }
}),
vjs.PlayProgressBar.prototype.createEl = function() {
    return vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-play-progress",
        innerHTML: '<span class="vjs-control-text">Progress: 0%</span>'
    })
},
vjs.SeekHandle = vjs.SliderHandle.extend({
    init: function(e, t) {
        vjs.SliderHandle.call(this, e, t),
        e.on("timeupdate", vjs.bind(this, this.updateContent))
    }
}),
vjs.SeekHandle.prototype.defaultValue = "00:00",
vjs.SeekHandle.prototype.createEl = function() {
    return vjs.SliderHandle.prototype.createEl.call(this, "div", {
        className: "vjs-seek-handle",
        "aria-live": "off"
    })
},
vjs.SeekHandle.prototype.updateContent = function() {
    var e = this.player_.scrubbing ? this.player_.getCache().currentTime: this.player_.currentTime();
    this.el_.innerHTML = '<span class="vjs-control-text">' + vjs.formatTime(e, this.player_.duration()) + "</span>"
},
vjs.VolumeControl = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t),
        e.tech && e.tech.features && e.tech.features.volumeControl === !1 && this.addClass("vjs-hidden"),
        e.on("loadstart", vjs.bind(this,
        function() {
            e.tech.features && e.tech.features.volumeControl === !1 ? this.addClass("vjs-hidden") : this.removeClass("vjs-hidden")
        }))
    }
}),
vjs.VolumeControl.prototype.options_ = {
    children: {
        volumeBar: {}
    }
},
vjs.VolumeControl.prototype.createEl = function() {
    return vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-volume-control vjs-control"
    })
},
vjs.VolumeBar = vjs.Slider.extend({
    init: function(e, t) {
        vjs.Slider.call(this, e, t),
        e.on("volumechange", vjs.bind(this, this.updateARIAAttributes)),
        e.ready(vjs.bind(this, this.updateARIAAttributes))
    }
}),
vjs.VolumeBar.prototype.updateARIAAttributes = function() {
    this.el_.setAttribute("aria-valuenow", vjs.round(100 * this.player_.volume(), 2)),
    this.el_.setAttribute("aria-valuetext", vjs.round(100 * this.player_.volume(), 2) + "%")
},
vjs.VolumeBar.prototype.options_ = {
    children: {
        volumeLevel: {},
        volumeHandle: {}
    },
    barName: "volumeLevel",
    handleName: "volumeHandle"
},
vjs.VolumeBar.prototype.playerEvent = "volumechange",
vjs.VolumeBar.prototype.createEl = function() {
    return vjs.Slider.prototype.createEl.call(this, "div", {
        className: "vjs-volume-bar",
        "aria-label": "volume level"
    })
},
vjs.VolumeBar.prototype.onMouseMove = function(e) {
    this.player_.muted() && this.player_.muted(!1),
    this.player_.volume(this.calculateDistance(e))
},
vjs.VolumeBar.prototype.getPercent = function() {
    return this.player_.muted() ? 0 : this.player_.volume()
},
vjs.VolumeBar.prototype.stepForward = function() {
    this.player_.volume(this.player_.volume() + .1)
},
vjs.VolumeBar.prototype.stepBack = function() {
    this.player_.volume(this.player_.volume() - .1)
},
vjs.VolumeLevel = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t)
    }
}),
vjs.VolumeLevel.prototype.createEl = function() {
    return vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-volume-level",
        innerHTML: '<span class="vjs-control-text"></span>'
    })
},
vjs.VolumeHandle = vjs.SliderHandle.extend(),
vjs.VolumeHandle.prototype.defaultValue = "00:00",
vjs.VolumeHandle.prototype.createEl = function() {
    return vjs.SliderHandle.prototype.createEl.call(this, "div", {
        className: "vjs-volume-handle"
    })
},
vjs.MuteToggle = vjs.Button.extend({
    init: function(e, t) {
        vjs.Button.call(this, e, t),
        e.on("volumechange", vjs.bind(this, this.update)),
        e.tech && e.tech.features && e.tech.features.volumeControl === !1 && this.addClass("vjs-hidden"),
        e.on("loadstart", vjs.bind(this,
        function() {
            e.tech.features && e.tech.features.volumeControl === !1 ? this.addClass("vjs-hidden") : this.removeClass("vjs-hidden")
        }))
    }
}),
vjs.MuteToggle.prototype.createEl = function() {
    return vjs.Button.prototype.createEl.call(this, "div", {
        className: "vjs-mute-control vjs-control",
        innerHTML: '<div><span class="vjs-control-text">Mute</span></div>'
    })
},
vjs.MuteToggle.prototype.onClick = function() {
    this.player_.muted(!this.player_.muted())
},
vjs.MuteToggle.prototype.update = function() {
    var e = this.player_.volume(),
    t = 3;
    0 === e || this.player_.muted() ? t = 0 : .33 > e ? t = 1 : .67 > e && (t = 2),
    this.player_.muted() ? "Unmute" != this.el_.children[0].children[0].innerHTML && (this.el_.children[0].children[0].innerHTML = "Unmute") : "Mute" != this.el_.children[0].children[0].innerHTML && (this.el_.children[0].children[0].innerHTML = "Mute");
    for (var n = 0; 4 > n; n++) vjs.removeClass(this.el_, "vjs-vol-" + n);
    vjs.addClass(this.el_, "vjs-vol-" + t)
},
vjs.VolumeMenuButton = vjs.MenuButton.extend({
    init: function(e, t) {
        vjs.MenuButton.call(this, e, t),
        e.on("volumechange", vjs.bind(this, this.update)),
        e.tech && e.tech.features && e.tech.features.volumeControl === !1 && this.addClass("vjs-hidden"),
        e.on("loadstart", vjs.bind(this,
        function() {
            e.tech.features && e.tech.features.volumeControl === !1 ? this.addClass("vjs-hidden") : this.removeClass("vjs-hidden")
        })),
        this.addClass("vjs-menu-button")
    }
}),
vjs.VolumeMenuButton.prototype.createMenu = function() {
    var e = new vjs.Menu(this.player_, {
        contentElType: "div"
    }),
    t = new vjs.VolumeBar(this.player_, vjs.obj.merge({
        vertical: !0
    },
    this.options_.volumeBar));
    return e.addChild(t),
    e
},
vjs.VolumeMenuButton.prototype.onClick = function() {
    vjs.MuteToggle.prototype.onClick.call(this),
    vjs.MenuButton.prototype.onClick.call(this)
},
vjs.VolumeMenuButton.prototype.createEl = function() {
    return vjs.Button.prototype.createEl.call(this, "div", {
        className: "vjs-volume-menu-button vjs-menu-button vjs-control",
        innerHTML: '<div><span class="vjs-control-text">Mute</span></div>'
    })
},
vjs.VolumeMenuButton.prototype.update = vjs.MuteToggle.prototype.update,
vjs.PlaybackRateMenuButton = vjs.MenuButton.extend({
    init: function(e, t) {
        vjs.MenuButton.call(this, e, t),
        this.updateVisibility(),
        this.updateLabel(),
        e.on("loadstart", vjs.bind(this, this.updateVisibility)),
        e.on("ratechange", vjs.bind(this, this.updateLabel))
    }
}),
vjs.PlaybackRateMenuButton.prototype.createEl = function() {
    var e = vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-playback-rate vjs-menu-button vjs-control",
        innerHTML: '<div class="vjs-control-content"><span class="vjs-control-text">Playback Rate</span></div>'
    });
    return this.labelEl_ = vjs.createEl("div", {
        className: "vjs-playback-rate-value",
        innerHTML: 1
    }),
    e.appendChild(this.labelEl_),
    e
},
vjs.PlaybackRateMenuButton.prototype.createMenu = function() {
    var e = new vjs.Menu(this.player()),
    t = this.player().options().playbackRates;
    if (t) for (var n = t.length - 1; n >= 0; n--) e.addChild(new vjs.PlaybackRateMenuItem(this.player(), {
        rate: t[n] + "x"
    }));
    return e
},
vjs.PlaybackRateMenuButton.prototype.updateARIAAttributes = function() {
    this.el().setAttribute("aria-valuenow", this.player().playbackRate())
},
vjs.PlaybackRateMenuButton.prototype.onClick = function() {
    for (var e = this.player().playbackRate(), t = this.player().options().playbackRates, n = t[0], r = 0; r < t.length; r++) if (t[r] > e) {
        n = t[r];
        break
    }
    this.player().playbackRate(n)
},
vjs.PlaybackRateMenuButton.prototype.playbackRateSupported = function() {
    return this.player().tech && this.player().tech.features.playbackRate && this.player().options().playbackRates && this.player().options().playbackRates.length > 0
},
vjs.PlaybackRateMenuButton.prototype.updateVisibility = function() {
    this.playbackRateSupported() ? this.removeClass("vjs-hidden") : this.addClass("vjs-hidden")
},
vjs.PlaybackRateMenuButton.prototype.updateLabel = function() {
    this.playbackRateSupported() && (this.labelEl_.innerHTML = this.player().playbackRate() + "x")
},
vjs.PlaybackRateMenuItem = vjs.MenuItem.extend({
    contentElType: "button",
    init: function(e, t) {
        var n = this.label = t.rate,
        r = this.rate = parseFloat(n, 10);
        t.label = n,
        t.selected = 1 === r,
        vjs.MenuItem.call(this, e, t),
        this.player().on("ratechange", vjs.bind(this, this.update))
    }
}),
vjs.PlaybackRateMenuItem.prototype.onClick = function() {
    vjs.MenuItem.prototype.onClick.call(this),
    this.player().playbackRate(this.rate)
},
vjs.PlaybackRateMenuItem.prototype.update = function() {
    this.selected(this.player().playbackRate() == this.rate)
},
vjs.PosterImage = vjs.Button.extend({
    init: function(e, t) {
        vjs.Button.call(this, e, t),
        e.poster() && this.src(e.poster()),
        e.poster() && e.controls() || this.hide(),
        e.on("posterchange", vjs.bind(this,
        function() {
            this.src(e.poster())
        })),
        e.on("play", vjs.bind(this, this.hide)),
        e.on("ended", vjs.bind(this, this.show))
    }
});
var _backgroundSizeSupported = "backgroundSize" in vjs.TEST_VID.style;
vjs.PosterImage.prototype.createEl = function() {
    var e = vjs.createEl("div", {
        className: "vjs-poster",
        tabIndex: -1
    });
    return _backgroundSizeSupported || e.appendChild(vjs.createEl("img")),
    e
},
vjs.PosterImage.prototype.src = function(e) {
    var t = this.el();
    void 0 !== e && (_backgroundSizeSupported ? t.style.backgroundImage = 'url("' + e + '")': t.firstChild.src = e)
},
vjs.PosterImage.prototype.onClick = function() {
    this.player().controls() && this.player_.play()
},
vjs.LoadingSpinner = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t),
        e.on("canplay", vjs.bind(this, this.hide)),
        e.on("canplaythrough", vjs.bind(this, this.hide)),
        e.on("playing", vjs.bind(this, this.hide)),
        e.on("seeking", vjs.bind(this, this.show)),
        e.on("seeked", vjs.bind(this, this.hide)),
        e.on("ended", vjs.bind(this, this.hide)),
        e.on("waiting", vjs.bind(this, this.show))
    }
}),
vjs.LoadingSpinner.prototype.createEl = function() {
    return vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-loading-spinner"
    })
},
vjs.BigPlayButton = vjs.Button.extend(),
vjs.BigPlayButton.prototype.createEl = function() {
    return vjs.Button.prototype.createEl.call(this, "div", {
        className: "vjs-big-play-button",
        innerHTML: '<span aria-hidden="true"></span>',
        "aria-label": "play video"
    })
},
vjs.BigPlayButton.prototype.onClick = function() {
    this.player_.play()
},
vjs.ErrorDisplay = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t),
        this.update(),
        e.on("error", vjs.bind(this, this.update))
    }
}),
vjs.ErrorDisplay.prototype.createEl = function() {
    var e = vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-error-display"
    });
    return this.contentEl_ = vjs.createEl("div"),
    e.appendChild(this.contentEl_),
    e
},
vjs.ErrorDisplay.prototype.update = function() {
    this.player().error() && (this.contentEl_.innerHTML = this.player().error().message)
},
vjs.MediaTechController = vjs.Component.extend({
    init: function(e, t, n) {
        t = t || {},
        t.reportTouchActivity = !1,
        vjs.Component.call(this, e, t, n),
        this.initControlsListeners()
    }
}),
vjs.MediaTechController.prototype.initControlsListeners = function() {
    var e, t, n, r;
    t = this,
    e = this.player();
    var n = function() {
        e.controls() && !e.usingNativeControls() && t.addControlsListeners()
    };
    r = vjs.bind(t, t.removeControlsListeners),
    this.ready(n),
    e.on("controlsenabled", n),
    e.on("controlsdisabled", r)
},
vjs.MediaTechController.prototype.addControlsListeners = function() {
    var e;
    this.on("mousedown", this.onClick),
    this.on("touchstart",
    function(t) {
        t.preventDefault(),
        e = this.player_.userActive()
    }),
    this.on("touchmove",
    function(t) {
        e && this.player().reportUserActivity()
    }),
    this.emitTapEvents(),
    this.on("tap", this.onTap)
},
vjs.MediaTechController.prototype.removeControlsListeners = function() {
    this.off("tap"),
    this.off("touchstart"),
    this.off("touchmove"),
    this.off("touchleave"),
    this.off("touchcancel"),
    this.off("touchend"),
    this.off("click"),
    this.off("mousedown")
},
vjs.MediaTechController.prototype.onClick = function(e) {
    0 === e.button && this.player().controls() && (this.player().paused() ? this.player().play() : this.player().pause())
},
vjs.MediaTechController.prototype.onTap = function() {
    this.player().userActive(!this.player().userActive())
},
vjs.MediaTechController.prototype.setPoster = function() {},
vjs.MediaTechController.prototype.features = {
    volumeControl: !0,
    fullscreenResize: !1,
    playbackRate: !1,
    progressEvents: !1,
    timeupdateEvents: !1
},
vjs.media = {},
vjs.media.ApiMethods = "play,pause,paused,currentTime,setCurrentTime,duration,buffered,volume,setVolume,muted,setMuted,width,height,supportsFullScreen,enterFullScreen,src,load,currentSrc,preload,setPreload,autoplay,setAutoplay,loop,setLoop,error,networkState,readyState,seeking,initialTime,startOffsetTime,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks,defaultPlaybackRate,playbackRate,mediaGroup,controller,controls,defaultMuted".split(",");
for (var i = vjs.media.ApiMethods.length - 1; i >= 0; i--) {
    var methodName = vjs.media.ApiMethods[i];
    vjs.MediaTechController.prototype[vjs.media.ApiMethods[i]] = createMethod(methodName)
}
vjs.Html5 = vjs.MediaTechController.extend({
    init: function(e, t, n) {
        this.features.volumeControl = vjs.Html5.canControlVolume(),
        this.features.playbackRate = vjs.Html5.canControlPlaybackRate(),
        this.features.movingMediaElementInDOM = !vjs.IS_IOS,
        this.features.fullscreenResize = !0,
        vjs.MediaTechController.call(this, e, t, n),
        this.setupTriggers();
        var r = t.source;
        r && this.el_.currentSrc === r.src && this.el_.networkState > 0 ? e.ready(function() {
            e.trigger("loadstart")
        }) : r && (this.el_.src = r.src),
        vjs.TOUCH_ENABLED && e.options().nativeControlsForTouch !== !1 && this.useNativeControls(),
        e.ready(function() {
            this.tag && this.options_.autoplay && this.paused() && (delete this.tag.poster, this.play())
        }),
        this.triggerReady()
    }
}),
vjs.Html5.prototype.dispose = function() {
    vjs.MediaTechController.prototype.dispose.call(this)
},
vjs.Html5.prototype.createEl = function() {
    var e, t = this.player_,
    n = t.tag;
    n && this.features.movingMediaElementInDOM !== !1 || (n ? (e = n.cloneNode(!1), vjs.Html5.disposeMediaElement(n), n = e, t.tag = null) : n = vjs.createEl("video", {
        id: t.id() + "_html5_api",
        className: "vjs-tech"
    }), n.player = t, vjs.insertFirst(n, t.el()));
    for (var r = ["autoplay", "preload", "loop", "muted"], i = r.length - 1; i >= 0; i--) {
        var o = r[i];
        null !== t.options_[o] && (n[o] = t.options_[o])
    }
    return n
},
vjs.Html5.prototype.setupTriggers = function() {
    for (var e = vjs.Html5.Events.length - 1; e >= 0; e--) vjs.on(this.el_, vjs.Html5.Events[e], vjs.bind(this, this.eventHandler))
},
vjs.Html5.prototype.eventHandler = function(e) {
    "error" == e.type ? this.player().error(this.error().code) : (e.bubbles = !1, this.player().trigger(e))
},
vjs.Html5.prototype.useNativeControls = function() {
    var e, t, n, r, i;
    e = this,
    t = this.player(),
    e.setControls(t.controls()),
    n = function() {
        e.setControls(!0)
    },
    r = function() {
        e.setControls(!1)
    },
    t.on("controlsenabled", n),
    t.on("controlsdisabled", r),
    i = function() {
        t.off("controlsenabled", n),
        t.off("controlsdisabled", r)
    },
    e.on("dispose", i),
    t.on("usingcustomcontrols", i),
    t.usingNativeControls(!0)
},
vjs.Html5.prototype.play = function() {
    this.el_.play()
},
vjs.Html5.prototype.pause = function() {
    this.el_.pause()
},
vjs.Html5.prototype.paused = function() {
    return this.el_.paused
},
vjs.Html5.prototype.currentTime = function() {
    return this.el_.currentTime
},
vjs.Html5.prototype.setCurrentTime = function(e) {
    try {
        this.el_.currentTime = e
    } catch(t) {
        vjs.log(t, "Video is not ready. (Video.js)")
    }
},
vjs.Html5.prototype.duration = function() {
    return this.el_.duration || 0
},
vjs.Html5.prototype.buffered = function() {
    return this.el_.buffered
},
vjs.Html5.prototype.volume = function() {
    return this.el_.volume
},
vjs.Html5.prototype.setVolume = function(e) {
    this.el_.volume = e
},
vjs.Html5.prototype.muted = function() {
    return this.el_.muted
},
vjs.Html5.prototype.setMuted = function(e) {
    this.el_.muted = e
},
vjs.Html5.prototype.width = function() {
    return this.el_.offsetWidth
},
vjs.Html5.prototype.height = function() {
    return this.el_.offsetHeight
},
vjs.Html5.prototype.supportsFullScreen = function() {
    return "function" == typeof this.el_.webkitEnterFullScreen && (/Android/.test(vjs.USER_AGENT) || !/Chrome|Mac OS X 10.5/.test(vjs.USER_AGENT))
},
vjs.Html5.prototype.enterFullScreen = function() {
    var e = this.el_;
    e.paused && e.networkState <= e.HAVE_METADATA ? (this.el_.play(), setTimeout(function() {
        e.pause(),
        e.webkitEnterFullScreen()
    },
    0)) : e.webkitEnterFullScreen()
},
vjs.Html5.prototype.exitFullScreen = function() {
    this.el_.webkitExitFullScreen()
},
vjs.Html5.prototype.src = function(e) {
    this.el_.src = e
},
vjs.Html5.prototype.load = function() {
    this.el_.load()
},
vjs.Html5.prototype.currentSrc = function() {
    return this.el_.currentSrc
},
vjs.Html5.prototype.poster = function() {
    return this.el_.poster
},
vjs.Html5.prototype.setPoster = function(e) {
    this.el_.poster = e
},
vjs.Html5.prototype.preload = function() {
    return this.el_.preload
},
vjs.Html5.prototype.setPreload = function(e) {
    this.el_.preload = e
},
vjs.Html5.prototype.autoplay = function() {
    return this.el_.autoplay
},
vjs.Html5.prototype.setAutoplay = function(e) {
    this.el_.autoplay = e
},
vjs.Html5.prototype.controls = function() {
    return this.el_.controls
},
vjs.Html5.prototype.setControls = function(e) {
    this.el_.controls = !!e
},
vjs.Html5.prototype.loop = function() {
    return this.el_.loop
},
vjs.Html5.prototype.setLoop = function(e) {
    this.el_.loop = e
},
vjs.Html5.prototype.error = function() {
    return this.el_.error
},
vjs.Html5.prototype.seeking = function() {
    return this.el_.seeking
},
vjs.Html5.prototype.ended = function() {
    return this.el_.ended
},
vjs.Html5.prototype.defaultMuted = function() {
    return this.el_.defaultMuted
},
vjs.Html5.prototype.playbackRate = function() {
    return this.el_.playbackRate
},
vjs.Html5.prototype.setPlaybackRate = function(e) {
    this.el_.playbackRate = e
},
vjs.Html5.isSupported = function() {
    try {
        vjs.TEST_VID.volume = .5
    } catch(e) {
        return ! 1
    }
    return !! vjs.TEST_VID.canPlayType
},
vjs.Html5.canPlaySource = function(e) {
    try {
        return !! vjs.TEST_VID.canPlayType(e.type)
    } catch(t) {
        return ""
    }
},
vjs.Html5.canControlVolume = function() {
    var e = vjs.TEST_VID.volume;
    return vjs.TEST_VID.volume = e / 2 + .1,
    e !== vjs.TEST_VID.volume
},
vjs.Html5.canControlPlaybackRate = function() {
    var e = vjs.TEST_VID.playbackRate;
    return vjs.TEST_VID.playbackRate = e / 2 + .1,
    e !== vjs.TEST_VID.playbackRate
},
function() {
    var e, t = /^application\/(?:x-|vnd\.apple\.)mpegurl/i,
    n = /^video\/mp4/i;
    vjs.Html5.patchCanPlayType = function() {
        vjs.ANDROID_VERSION >= 4 && (e || (e = vjs.TEST_VID.constructor.prototype.canPlayType), vjs.TEST_VID.constructor.prototype.canPlayType = function(n) {
            return n && t.test(n) ? "maybe": e.call(this, n)
        }),
        vjs.IS_OLD_ANDROID && (e || (e = vjs.TEST_VID.constructor.prototype.canPlayType), vjs.TEST_VID.constructor.prototype.canPlayType = function(t) {
            return t && n.test(t) ? "maybe": e.call(this, t)
        })
    },
    vjs.Html5.unpatchCanPlayType = function() {
        var t = vjs.TEST_VID.constructor.prototype.canPlayType;
        return vjs.TEST_VID.constructor.prototype.canPlayType = e,
        e = null,
        t
    },
    vjs.Html5.patchCanPlayType()
} (),
vjs.Html5.Events = "loadstart,suspend,abort,error,emptied,stalled,loadedmetadata,loadeddata,canplay,canplaythrough,playing,waiting,seeking,seeked,ended,durationchange,timeupdate,progress,play,pause,ratechange,volumechange".split(","),
vjs.Html5.disposeMediaElement = function(e) {
    if (e) {
        for (e.player = null, e.parentNode && e.parentNode.removeChild(e); e.hasChildNodes();) e.removeChild(e.firstChild);
        e.removeAttribute("src"),
        "function" == typeof e.load && !
        function() {
            try {
                e.load()
            } catch(t) {}
        } ()
    }
},
vjs.Flash = vjs.MediaTechController.extend({
    init: function(e, t, n) {
        vjs.MediaTechController.call(this, e, t, n);
        var r, i = t.source,
        o = t.parentEl,
        s = this.el_ = vjs.createEl("div", {
            id: e.id() + "_temp_flash"
        }),
        a = e.id() + "_flash_api",
        l = e.options_,
        u = vjs.obj.merge({
            readyFunction: "videojs.Flash.onReady",
            eventProxyFunction: "videojs.Flash.onEvent",
            errorEventProxyFunction: "videojs.Flash.onError",
            autoplay: l.autoplay,
            preload: l.preload,
            loop: l.loop,
            muted: l.muted
        },
        t.flashVars),
        c = vjs.obj.merge({
            wmode: "opaque",
            bgcolor: "#000000"
        },
        t.params),
        h = vjs.obj.merge({
            id: a,
            name: a,
            "class": "vjs-tech"
        },
        t.attributes);
        if (i) if (i.type && vjs.Flash.isStreamingType(i.type)) {
            var p = vjs.Flash.streamToParts(i.src);
            u.rtmpConnection = encodeURIComponent(p.connection),
            u.rtmpStream = encodeURIComponent(p.stream)
        } else u.src = encodeURIComponent(vjs.getAbsoluteURL(i.src));
        if (this.setCurrentTime = function(e) {
            r = e,
            this.el_.vjs_setProperty("currentTime", e)
        },
        this.currentTime = function(e) {
            return this.seeking() ? r: this.el_.vjs_getProperty("currentTime")
        },
        vjs.insertFirst(s, o), t.startTime && this.ready(function() {
            this.load(),
            this.play(),
            this.currentTime(t.startTime)
        }), vjs.IS_FIREFOX && this.ready(function() {
            vjs.on(this.el(), "mousemove", vjs.bind(this,
            function() {
                this.player().trigger({
                    type: "mousemove",
                    bubbles: !1
                })
            }))
        }), t.iFrameMode !== !0 || vjs.IS_FIREFOX) vjs.Flash.embed(t.swf, s, u, c, h);
        else {
            var d = vjs.createEl("iframe", {
                id: a + "_iframe",
                name: a + "_iframe",
                className: "vjs-tech",
                scrolling: "no",
                marginWidth: 0,
                marginHeight: 0,
                frameBorder: 0
            });
            u.readyFunction = "ready",
            u.eventProxyFunction = "events",
            u.errorEventProxyFunction = "errors",
            vjs.on(d, "load", vjs.bind(this,
            function() {
                var e, n = d.contentWindow;
                e = d.contentDocument ? d.contentDocument: d.contentWindow.document,
                e.write(vjs.Flash.getEmbedCode(t.swf, u, c, h)),
                n.player = this.player_,
                n.ready = vjs.bind(this.player_,
                function(t) {
                    var n = e.getElementById(t),
                    r = this,
                    i = r.tech;
                    i.el_ = n,
                    vjs.Flash.checkReady(i)
                }),
                n.events = vjs.bind(this.player_,
                function(e, t) {
                    var n = this;
                    n && "flash" === n.techName && n.trigger(t)
                }),
                n.errors = vjs.bind(this.player_,
                function(e, t) {
                    vjs.log("Flash Error", t)
                })
            })),
            s.parentNode.replaceChild(d, s)
        }
    }
}),
vjs.Flash.prototype.dispose = function() {
    vjs.MediaTechController.prototype.dispose.call(this)
},
vjs.Flash.prototype.play = function() {
    this.el_.vjs_play()
},
vjs.Flash.prototype.pause = function() {
    this.el_.vjs_pause()
},
vjs.Flash.prototype.src = function(e) {
    if (void 0 === e) return this.currentSrc();
    if (vjs.Flash.isStreamingSrc(e) ? (e = vjs.Flash.streamToParts(e), this.setRtmpConnection(e.connection), this.setRtmpStream(e.stream)) : (e = vjs.getAbsoluteURL(e), this.el_.vjs_src(e)), this.player_.autoplay()) {
        var t = this;
        setTimeout(function() {
            t.play()
        },
        0)
    }
},
vjs.Flash.prototype.currentSrc = function() {
    var e = this.el_.vjs_getProperty("currentSrc");
    if (null == e) {
        var t = this.rtmpConnection(),
        n = this.rtmpStream();
        t && n && (e = vjs.Flash.streamFromParts(t, n))
    }
    return e
},
vjs.Flash.prototype.load = function() {
    this.el_.vjs_load()
},
vjs.Flash.prototype.poster = function() {
    this.el_.vjs_getProperty("poster")
},
vjs.Flash.prototype.setPoster = function() {},
vjs.Flash.prototype.buffered = function() {
    return vjs.createTimeRange(0, this.el_.vjs_getProperty("buffered"))
},
vjs.Flash.prototype.supportsFullScreen = function() {
    return ! 1
},
vjs.Flash.prototype.enterFullScreen = function() {
    return ! 1
};
var api = vjs.Flash.prototype,
readWrite = "rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted".split(","),
readOnly = "error,networkState,readyState,seeking,initialTime,duration,startOffsetTime,paused,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight,textTracks".split(","),
createSetter = function(e) {
    var t = e.charAt(0).toUpperCase() + e.slice(1);
    api["set" + t] = function(t) {
        return this.el_.vjs_setProperty(e, t)
    }
},
createGetter = function(e) {
    api[e] = function() {
        return this.el_.vjs_getProperty(e)
    }
};
if (function() {
    var e;
    for (e = 0; e < readWrite.length; e++) createGetter(readWrite[e]),
    createSetter(readWrite[e]);
    for (e = 0; e < readOnly.length; e++) createGetter(readOnly[e])
} (), vjs.Flash.isSupported = function() {
    return vjs.Flash.version()[0] >= 10
},
vjs.Flash.canPlaySource = function(e) {
    var t;
    return e.type ? (t = e.type.replace(/;.*/, "").toLowerCase(), t in vjs.Flash.formats || t in vjs.Flash.streamingFormats ? "maybe": void 0) : ""
},
vjs.Flash.formats = {
    "video/flv": "FLV",
    "video/x-flv": "FLV",
    "video/mp4": "MP4",
    "video/m4v": "MP4"
},
vjs.Flash.streamingFormats = {
    "rtmp/mp4": "MP4",
    "rtmp/flv": "FLV"
},
vjs.Flash.onReady = function(e) {
    var t = vjs.el(e),
    n = t.player || t.parentNode.player,
    r = n.tech;
    t.player = n,
    r.el_ = t,
    vjs.Flash.checkReady(r)
},
vjs.Flash.checkReady = function(e) {
    e.el().vjs_getProperty ? e.triggerReady() : setTimeout(function() {
        vjs.Flash.checkReady(e)
    },
    50)
},
vjs.Flash.onEvent = function(e, t) {
    var n = vjs.el(e).player;
    n.trigger(t)
},
vjs.Flash.onError = function(e, t) {
    var n = vjs.el(e).player,
    r = "FLASH: " + t;
    "srcnotfound" == t ? n.error({
        code: 4,
        message: r
    }) : n.error(r)
},
vjs.Flash.version = function() {
    var e = "0,0,0";
    try {
        e = new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version").replace(/\D+/g, ",").match(/^,?(.+),?$/)[1]
    } catch(t) {
        try {
            navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin && (e = (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1])
        } catch(n) {}
    }
    return e.split(",")
},
vjs.Flash.embed = function(e, t, n, r, i) {
    var o = vjs.Flash.getEmbedCode(e, n, r, i),
    s = vjs.createEl("div", {
        innerHTML: o
    }).childNodes[0],
    a = t.parentNode;
    t.parentNode.replaceChild(s, t);
    var l = a.childNodes[0];
    return setTimeout(function() {
        l.style.display = "block"
    },
    1e3),
    s
},
vjs.Flash.getEmbedCode = function(e, t, n, r) {
    var i = '<object type="application/x-shockwave-flash"',
    o = "",
    s = "",
    a = "";
    return t && vjs.obj.each(t,
    function(e, t) {
        o += e + "=" + t + "&amp;"
    }),
    n = vjs.obj.merge({
        movie: e,
        flashvars: o,
        allowScriptAccess: "always",
        allowNetworking: "all"
    },
    n),
    vjs.obj.each(n,
    function(e, t) {
        s += '<param name="' + e + '" value="' + t + '" />'
    }),
    r = vjs.obj.merge({
        data: e,
        width: "100%",
        height: "100%"
    },
    r),
    vjs.obj.each(r,
    function(e, t) {
        a += e + '="' + t + '" '
    }),
    i + a + ">" + s + "</object>"
},
vjs.Flash.streamFromParts = function(e, t) {
    return e + "&" + t
},
vjs.Flash.streamToParts = function(e) {
    var t = {
        connection: "",
        stream: ""
    };
    if (!e) return t;
    var n, r = e.indexOf("&");
    return - 1 !== r ? n = r + 1 : (r = n = e.lastIndexOf("/") + 1, 0 === r && (r = n = e.length)),
    t.connection = e.substring(0, r),
    t.stream = e.substring(n, e.length),
    t
},
vjs.Flash.isStreamingType = function(e) {
    return e in vjs.Flash.streamingFormats
},
vjs.Flash.RTMP_RE = /^rtmp[set]?:\/\//i, vjs.Flash.isStreamingSrc = function(e) {
    return vjs.Flash.RTMP_RE.test(e)
},
vjs.MediaLoader = vjs.Component.extend({
    init: function(e, t, n) {
        if (vjs.Component.call(this, e, t, n), e.options_.sources && 0 !== e.options_.sources.length) e.src(e.options_.sources);
        else for (var r = 0,
        i = e.options_.techOrder; r < i.length; r++) {
            var o = vjs.capitalize(i[r]),
            s = window.videojs[o];
            if (s && s.isSupported()) {
                e.loadTech(o);
                break
            }
        }
    }
}), vjs.Player.prototype.textTracks_, vjs.Player.prototype.textTracks = function() {
    return this.textTracks_ = this.textTracks_ || [],
    this.textTracks_
},
vjs.Player.prototype.addTextTrack = function(e, t, n, r) {
    var i = this.textTracks_ = this.textTracks_ || [];
    r = r || {},
    r.kind = e,
    r.label = t,
    r.language = n;
    var o = vjs.capitalize(e || "subtitles"),
    s = new window.videojs[o + "Track"](this, r);
    return i.push(s),
    s.dflt() && this.ready(function() {
        setTimeout(function() {
            s.show()
        },
        0)
    }),
    s
},
vjs.Player.prototype.addTextTracks = function(e) {
    for (var t, n = 0; n < e.length; n++) t = e[n],
    this.addTextTrack(t.kind, t.label, t.language, t);
    return this
},
vjs.Player.prototype.showTextTrack = function(e, t) {
    for (var n, r, i, o = this.textTracks_,
    s = 0,
    a = o.length; a > s; s++) n = o[s],
    n.id() === e ? (n.show(), r = n) : t && n.kind() == t && n.mode() > 0 && n.disable();
    return i = r ? r.kind() : t ? t: !1,
    i && this.trigger(i + "trackchange"),
    this
},
vjs.TextTrack = vjs.Component.extend({
    init: function(e, t) {
        vjs.Component.call(this, e, t),
        this.id_ = t.id || "vjs_" + t.kind + "_" + t.language + "_" + vjs.guid++,
        this.src_ = t.src,
        this.dflt_ = t["default"] || t.dflt,
        this.title_ = t.title,
        this.language_ = t.srclang,
        this.label_ = t.label,
        this.cues_ = [],
        this.activeCues_ = [],
        this.readyState_ = 0,
        this.mode_ = 0,
        this.player_.on("fullscreenchange", vjs.bind(this, this.adjustFontSize))
    }
}), vjs.TextTrack.prototype.kind_, vjs.TextTrack.prototype.kind = function() {
    return this.kind_
},
vjs.TextTrack.prototype.src_, vjs.TextTrack.prototype.src = function() {
    return this.src_
},
vjs.TextTrack.prototype.dflt_, vjs.TextTrack.prototype.dflt = function() {
    return this.dflt_
},
vjs.TextTrack.prototype.title_, vjs.TextTrack.prototype.title = function() {
    return this.title_
},
vjs.TextTrack.prototype.language_, vjs.TextTrack.prototype.language = function() {
    return this.language_
},
vjs.TextTrack.prototype.label_, vjs.TextTrack.prototype.label = function() {
    return this.label_
},
vjs.TextTrack.prototype.cues_, vjs.TextTrack.prototype.cues = function() {
    return this.cues_
},
vjs.TextTrack.prototype.activeCues_, vjs.TextTrack.prototype.activeCues = function() {
    return this.activeCues_
},
vjs.TextTrack.prototype.readyState_, vjs.TextTrack.prototype.readyState = function() {
    return this.readyState_
},
vjs.TextTrack.prototype.mode_, vjs.TextTrack.prototype.mode = function() {
    return this.mode_
},
vjs.TextTrack.prototype.adjustFontSize = function() {
    this.player_.isFullScreen() ? this.el_.style.fontSize = screen.width / this.player_.width() * 1.4 * 100 + "%": this.el_.style.fontSize = ""
},
vjs.TextTrack.prototype.createEl = function() {
    return vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-" + this.kind_ + " vjs-text-track"
    })
},
vjs.TextTrack.prototype.show = function() {
    this.activate(),
    this.mode_ = 2,
    vjs.Component.prototype.show.call(this)
},
vjs.TextTrack.prototype.hide = function() {
    this.activate(),
    this.mode_ = 1,
    vjs.Component.prototype.hide.call(this)
},
vjs.TextTrack.prototype.disable = function() {
    2 == this.mode_ && this.hide(),
    this.deactivate(),
    this.mode_ = 0
},
vjs.TextTrack.prototype.activate = function() {
    0 === this.readyState_ && this.load(),
    0 === this.mode_ && (this.player_.on("timeupdate", vjs.bind(this, this.update, this.id_)), this.player_.on("ended", vjs.bind(this, this.reset, this.id_)), "captions" !== this.kind_ && "subtitles" !== this.kind_ || this.player_.getChild("textTrackDisplay").addChild(this))
},
vjs.TextTrack.prototype.deactivate = function() {
    this.player_.off("timeupdate", vjs.bind(this, this.update, this.id_)),
    this.player_.off("ended", vjs.bind(this, this.reset, this.id_)),
    this.reset(),
    this.player_.getChild("textTrackDisplay").removeChild(this)
},
vjs.TextTrack.prototype.load = function() {
    0 === this.readyState_ && (this.readyState_ = 1, vjs.get(this.src_, vjs.bind(this, this.parseCues), vjs.bind(this, this.onError)))
},
vjs.TextTrack.prototype.onError = function(e) {
    this.error = e,
    this.readyState_ = 3,
    this.trigger("error")
},
vjs.TextTrack.prototype.parseCues = function(e) {
    for (var t, n, r, i, o = e.split("\n"), s = "", a = 1, l = o.length; l > a; a++) if (s = vjs.trim(o[a])) {
        for ( - 1 == s.indexOf("-->") ? (i = s, s = vjs.trim(o[++a])) : i = this.cues_.length, t = {
            id: i,
            index: this.cues_.length
        },
        n = s.split(" --> "), t.startTime = this.parseCueTime(n[0]), t.endTime = this.parseCueTime(n[1]), r = []; o[++a] && (s = vjs.trim(o[a]));) r.push(s);
        t.text = r.join("<br/>"),
        this.cues_.push(t)
    }
    this.readyState_ = 2,
    this.trigger("loaded")
},
vjs.TextTrack.prototype.parseCueTime = function(e) {
    var t, n, r, i, o, s = e.split(":"),
    a = 0;
    return 3 == s.length ? (t = s[0], n = s[1], r = s[2]) : (t = 0, n = s[0], r = s[1]),
    r = r.split(/\s+/),
    i = r.splice(0, 1)[0],
    i = i.split(/\.|,/),
    o = parseFloat(i[1]),
    i = i[0],
    a += 3600 * parseFloat(t),
    a += 60 * parseFloat(n),
    a += parseFloat(i),
    o && (a += o / 1e3),
    a
},
vjs.TextTrack.prototype.update = function() {
    if (this.cues_.length > 0) {
        var e = this.player_.options().trackTimeOffset || 0,
        t = this.player_.currentTime() + e;
        if (void 0 === this.prevChange || t < this.prevChange || this.nextChange <= t) {
            var n, r, i, o, s = this.cues_,
            a = this.player_.duration(),
            l = 0,
            u = !1,
            c = [];
            for (t >= this.nextChange || void 0 === this.nextChange ? o = void 0 !== this.firstActiveIndex ? this.firstActiveIndex: 0 : (u = !0, o = void 0 !== this.lastActiveIndex ? this.lastActiveIndex: s.length - 1);;) {
                if (i = s[o], i.endTime <= t) l = Math.max(l, i.endTime),
                i.active && (i.active = !1);
                else if (t < i.startTime) {
                    if (a = Math.min(a, i.startTime), i.active && (i.active = !1), !u) break
                } else u ? (c.splice(0, 0, i), void 0 === r && (r = o), n = o) : (c.push(i), void 0 === n && (n = o), r = o),
                a = Math.min(a, i.endTime),
                l = Math.max(l, i.startTime),
                i.active = !0;
                if (u) {
                    if (0 === o) break;
                    o--
                } else {
                    if (o === s.length - 1) break;
                    o++
                }
            }
            this.activeCues_ = c,
            this.nextChange = a,
            this.prevChange = l,
            this.firstActiveIndex = n,
            this.lastActiveIndex = r,
            this.updateDisplay(),
            this.trigger("cuechange")
        }
    }
},
vjs.TextTrack.prototype.updateDisplay = function() {
    for (var e = this.activeCues_,
    t = "",
    n = 0,
    r = e.length; r > n; n++) t += '<span class="vjs-tt-cue">' + e[n].text + "</span>";
    this.el_.innerHTML = t
},
vjs.TextTrack.prototype.reset = function() {
    this.nextChange = 0,
    this.prevChange = this.player_.duration(),
    this.firstActiveIndex = 0,
    this.lastActiveIndex = 0
},
vjs.CaptionsTrack = vjs.TextTrack.extend(), vjs.CaptionsTrack.prototype.kind_ = "captions", vjs.SubtitlesTrack = vjs.TextTrack.extend(), vjs.SubtitlesTrack.prototype.kind_ = "subtitles", vjs.ChaptersTrack = vjs.TextTrack.extend(), vjs.ChaptersTrack.prototype.kind_ = "chapters", vjs.TextTrackDisplay = vjs.Component.extend({
    init: function(e, t, n) {
        vjs.Component.call(this, e, t, n),
        e.options_.tracks && e.options_.tracks.length > 0 && this.player_.addTextTracks(e.options_.tracks)
    }
}), vjs.TextTrackDisplay.prototype.createEl = function() {
    return vjs.Component.prototype.createEl.call(this, "div", {
        className: "vjs-text-track-display"
    })
},
vjs.TextTrackMenuItem = vjs.MenuItem.extend({
    init: function(e, t) {
        var n = this.track = t.track;
        t.label = n.label(),
        t.selected = n.dflt(),
        vjs.MenuItem.call(this, e, t),
        this.player_.on(n.kind() + "trackchange", vjs.bind(this, this.update))
    }
}), vjs.TextTrackMenuItem.prototype.onClick = function() {
    vjs.MenuItem.prototype.onClick.call(this),
    this.player_.showTextTrack(this.track.id_, this.track.kind())
},
vjs.TextTrackMenuItem.prototype.update = function() {
    this.selected(2 == this.track.mode())
},
vjs.OffTextTrackMenuItem = vjs.TextTrackMenuItem.extend({
    init: function(e, t) {
        t.track = {
            kind: function() {
                return t.kind
            },
            player: e,
            label: function() {
                return t.kind + " off"
            },
            dflt: function() {
                return ! 1
            },
            mode: function() {
                return ! 1
            }
        },
        vjs.TextTrackMenuItem.call(this, e, t),
        this.selected(!0)
    }
}), vjs.OffTextTrackMenuItem.prototype.onClick = function() {
    vjs.TextTrackMenuItem.prototype.onClick.call(this),
    this.player_.showTextTrack(this.track.id_, this.track.kind())
},
vjs.OffTextTrackMenuItem.prototype.update = function() {
    for (var e, t = this.player_.textTracks(), n = 0, r = t.length, i = !0; r > n; n++) e = t[n],
    e.kind() == this.track.kind() && 2 == e.mode() && (i = !1);
    this.selected(i)
},
vjs.TextTrackButton = vjs.MenuButton.extend({
    init: function(e, t) {
        vjs.MenuButton.call(this, e, t),
        this.items.length <= 1 && this.hide()
    }
}), vjs.TextTrackButton.prototype.createItems = function() {
    var e, t = [];
    t.push(new vjs.OffTextTrackMenuItem(this.player_, {
        kind: this.kind_
    }));
    for (var n = 0; n < this.player_.textTracks().length; n++) e = this.player_.textTracks()[n],
    e.kind() === this.kind_ && t.push(new vjs.TextTrackMenuItem(this.player_, {
        track: e
    }));
    return t
},
vjs.CaptionsButton = vjs.TextTrackButton.extend({
    init: function(e, t, n) {
        vjs.TextTrackButton.call(this, e, t, n),
        this.el_.setAttribute("aria-label", "Captions Menu")
    }
}), vjs.CaptionsButton.prototype.kind_ = "captions", vjs.CaptionsButton.prototype.buttonText = "Captions", vjs.CaptionsButton.prototype.className = "vjs-captions-button", vjs.SubtitlesButton = vjs.TextTrackButton.extend({
    init: function(e, t, n) {
        vjs.TextTrackButton.call(this, e, t, n),
        this.el_.setAttribute("aria-label", "Subtitles Menu")
    }
}), vjs.SubtitlesButton.prototype.kind_ = "subtitles", vjs.SubtitlesButton.prototype.buttonText = "Subtitles", vjs.SubtitlesButton.prototype.className = "vjs-subtitles-button", vjs.ChaptersButton = vjs.TextTrackButton.extend({
    init: function(e, t, n) {
        vjs.TextTrackButton.call(this, e, t, n),
        this.el_.setAttribute("aria-label", "Chapters Menu")
    }
}), vjs.ChaptersButton.prototype.kind_ = "chapters", vjs.ChaptersButton.prototype.buttonText = "Chapters", vjs.ChaptersButton.prototype.className = "vjs-chapters-button", vjs.ChaptersButton.prototype.createItems = function() {
    for (var e, t = [], n = 0; n < this.player_.textTracks().length; n++) e = this.player_.textTracks()[n],
    e.kind() === this.kind_ && t.push(new vjs.TextTrackMenuItem(this.player_, {
        track: e
    }));
    return t
},
vjs.ChaptersButton.prototype.createMenu = function() {
    for (var e, t, n = this.player_.textTracks(), r = 0, i = n.length, o = this.items = []; i > r; r++) if (e = n[r], e.kind() == this.kind_ && e.dflt()) {
        if (e.readyState() < 2) return this.chaptersTrack = e,
        void e.on("loaded", vjs.bind(this, this.createMenu));
        t = e;
        break
    }
    var s = this.menu = new vjs.Menu(this.player_);
    if (s.contentEl().appendChild(vjs.createEl("li", {
        className: "vjs-menu-title",
        innerHTML: vjs.capitalize(this.kind_),
        tabindex: -1
    })), t) {
        var a, l, u = t.cues_;
        for (r = 0, i = u.length; i > r; r++) a = u[r],
        l = new vjs.ChaptersTrackMenuItem(this.player_, {
            track: t,
            cue: a
        }),
        o.push(l),
        s.addChild(l)
    }
    return this.items.length > 0 && this.show(),
    s
},
vjs.ChaptersTrackMenuItem = vjs.MenuItem.extend({
    init: function(e, t) {
        var n = this.track = t.track,
        r = this.cue = t.cue,
        i = e.currentTime();
        t.label = r.text,
        t.selected = r.startTime <= i && i < r.endTime,
        vjs.MenuItem.call(this, e, t),
        n.on("cuechange", vjs.bind(this, this.update))
    }
}), vjs.ChaptersTrackMenuItem.prototype.onClick = function() {
    vjs.MenuItem.prototype.onClick.call(this),
    this.player_.currentTime(this.cue.startTime),
    this.update(this.cue.startTime)
},
vjs.ChaptersTrackMenuItem.prototype.update = function() {
    var e = this.cue,
    t = this.player_.currentTime();
    this.selected(e.startTime <= t && t < e.endTime)
},
vjs.obj.merge(vjs.ControlBar.prototype.options_.children, {
    subtitlesButton: {},
    captionsButton: {},
    chaptersButton: {}
}), vjs.JSON, "undefined" != typeof window.JSON && "function" === window.JSON.parse) vjs.JSON = window.JSON;
else {
    vjs.JSON = {};
    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
    vjs.JSON.parse = function(text, reviver) {
        function walk(e, t) {
            var n, r, i = e[t];
            if (i && "object" == typeof i) for (n in i) Object.prototype.hasOwnProperty.call(i, n) && (r = walk(i, n), void 0 !== r ? i[n] = r: delete i[n]);
            return reviver.call(e, t, i)
        }
        var j;
        if (text = String(text), cx.lastIndex = 0, cx.test(text) && (text = text.replace(cx,
        function(e) {
            return "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice( - 4)
        })), /^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return j = eval("(" + text + ")"),
        "function" == typeof reviver ? walk({
            "": j
        },
        "") : j;
        throw new SyntaxError("JSON.parse(): invalid or malformed JSON data")
    }
}
vjs.autoSetup = function() {
    var e, t, n, r = document.getElementsByTagName("video");
    if (r && r.length > 0) for (var i = 0,
    o = r.length; o > i; i++) {
        if (t = r[i], !t || !t.getAttribute) {
            vjs.autoSetupTimeout(1);
            break
        }
        void 0 === t.player && (e = t.getAttribute("data-setup"), null !== e && (e = vjs.JSON.parse(e || "{}"), n = videojs(t, e)))
    } else vjs.windowLoaded || vjs.autoSetupTimeout(1)
},
vjs.autoSetupTimeout = function(e) {
    setTimeout(vjs.autoSetup, e)
},
"complete" === document.readyState ? vjs.windowLoaded = !0 : vjs.one(window, "load",
function() {
    vjs.windowLoaded = !0
}),
vjs.autoSetupTimeout(1),
vjs.plugin = function(e, t) {
    vjs.Player.prototype[e] = t
},
function(e) {
    e.fn.qrcode = function(t) {
        "string" == typeof t && (t = {
            text: t
        }),
        t = e.extend({},
        {
            render: "canvas",
            width: 256,
            height: 256,
            typeNumber: -1,
            correctLevel: QRErrorCorrectLevel.H,
            background: "#ffffff",
            foreground: "#000000"
        },
        t);
        var n = function() {
            var e = new QRCode(t.typeNumber, t.correctLevel);
            e.addData(t.text),
            e.make();
            var n = document.createElement("canvas");
            n.width = t.width,
            n.height = t.height;
            for (var r = n.getContext("2d"), i = t.width / e.getModuleCount(), o = t.height / e.getModuleCount(), s = 0; s < e.getModuleCount(); s++) for (var a = 0; a < e.getModuleCount(); a++) {
                r.fillStyle = e.isDark(s, a) ? t.foreground: t.background;
                var l = Math.ceil((a + 1) * i) - Math.floor(a * i),
                u = Math.ceil((s + 1) * i) - Math.floor(s * i);
                r.fillRect(Math.round(a * i), Math.round(s * o), l, u)
            }
            return n
        },
        r = function() {
            var n = new QRCode(t.typeNumber, t.correctLevel);
            n.addData(t.text),
            n.make();
            for (var r = e("<table></table>").css("width", t.width + "px").css("height", t.height + "px").css("border", "0px").css("border-collapse", "collapse").css("background-color", t.background), i = t.width / n.getModuleCount(), o = t.height / n.getModuleCount(), s = 0; s < n.getModuleCount(); s++) for (var a = e("<tr></tr>").css("height", o + "px").appendTo(r), l = 0; l < n.getModuleCount(); l++) e("<td></td>").css("width", i + "px").css("background-color", n.isDark(s, l) ? t.foreground: t.background).appendTo(a);
            return r
        };
        return this.each(function() {
            var i = "canvas" == t.render ? n() : r();
            e(i).appendTo(this)
        })
    }
} (jQuery),
QR8bitByte.prototype = {
    getLength: function(e) {
        return this.data.length
    },
    write: function(e) {
        for (var t = 0; t < this.data.length; t++) e.put(this.data.charCodeAt(t), 8)
    }
},
QRCode.prototype = {
    addData: function(e) {
        var t = new QR8bitByte(e);
        this.dataList.push(t),
        this.dataCache = null
    },
    isDark: function(e, t) {
        if (0 > e || this.moduleCount <= e || 0 > t || this.moduleCount <= t) throw new Error(e + "," + t);
        return this.modules[e][t]
    },
    getModuleCount: function() {
        return this.moduleCount
    },
    make: function() {
        if (this.typeNumber < 1) {
            var e = 1;
            for (e = 1; 40 > e; e++) {
                for (var t = QRRSBlock.getRSBlocks(e, this.errorCorrectLevel), n = new QRBitBuffer, r = 0, i = 0; i < t.length; i++) r += t[i].dataCount;
                for (var i = 0; i < this.dataList.length; i++) {
                    var o = this.dataList[i];
                    n.put(o.mode, 4),
                    n.put(o.getLength(), QRUtil.getLengthInBits(o.mode, e)),
                    o.write(n)
                }
                if (n.getLengthInBits() <= 8 * r) break
            }
            this.typeNumber = e
        }
        this.makeImpl(!1, this.getBestMaskPattern())
    },
    makeImpl: function(e, t) {
        this.moduleCount = 4 * this.typeNumber + 17,
        this.modules = new Array(this.moduleCount);
        for (var n = 0; n < this.moduleCount; n++) {
            this.modules[n] = new Array(this.moduleCount);
            for (var r = 0; r < this.moduleCount; r++) this.modules[n][r] = null
        }
        this.setupPositionProbePattern(0, 0),
        this.setupPositionProbePattern(this.moduleCount - 7, 0),
        this.setupPositionProbePattern(0, this.moduleCount - 7),
        this.setupPositionAdjustPattern(),
        this.setupTimingPattern(),
        this.setupTypeInfo(e, t),
        this.typeNumber >= 7 && this.setupTypeNumber(e),
        null == this.dataCache && (this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList)),
        this.mapData(this.dataCache, t)
    },
    setupPositionProbePattern: function(e, t) {
        for (var n = -1; 7 >= n; n++) if (! ( - 1 >= e + n || this.moduleCount <= e + n)) for (var r = -1; 7 >= r; r++) - 1 >= t + r || this.moduleCount <= t + r || (n >= 0 && 6 >= n && (0 == r || 6 == r) || r >= 0 && 6 >= r && (0 == n || 6 == n) || n >= 2 && 4 >= n && r >= 2 && 4 >= r ? this.modules[e + n][t + r] = !0 : this.modules[e + n][t + r] = !1)
    },
    getBestMaskPattern: function() {
        for (var e = 0,
        t = 0,
        n = 0; 8 > n; n++) {
            this.makeImpl(!0, n);
            var r = QRUtil.getLostPoint(this); (0 == n || e > r) && (e = r, t = n)
        }
        return t
    },
    createMovieClip: function(e, t, n) {
        var r = e.createEmptyMovieClip(t, n),
        i = 1;
        this.make();
        for (var o = 0; o < this.modules.length; o++) for (var s = o * i,
        a = 0; a < this.modules[o].length; a++) {
            var l = a * i,
            u = this.modules[o][a];
            u && (r.beginFill(0, 100), r.moveTo(l, s), r.lineTo(l + i, s), r.lineTo(l + i, s + i), r.lineTo(l, s + i), r.endFill())
        }
        return r
    },
    setupTimingPattern: function() {
        for (var e = 8; e < this.moduleCount - 8; e++) null == this.modules[e][6] && (this.modules[e][6] = e % 2 == 0);
        for (var t = 8; t < this.moduleCount - 8; t++) null == this.modules[6][t] && (this.modules[6][t] = t % 2 == 0)
    },
    setupPositionAdjustPattern: function() {
        for (var e = QRUtil.getPatternPosition(this.typeNumber), t = 0; t < e.length; t++) for (var n = 0; n < e.length; n++) {
            var r = e[t],
            i = e[n];
            if (null == this.modules[r][i]) for (var o = -2; 2 >= o; o++) for (var s = -2; 2 >= s; s++) - 2 == o || 2 == o || -2 == s || 2 == s || 0 == o && 0 == s ? this.modules[r + o][i + s] = !0 : this.modules[r + o][i + s] = !1
        }
    },
    setupTypeNumber: function(e) {
        for (var t = QRUtil.getBCHTypeNumber(this.typeNumber), n = 0; 18 > n; n++) {
            var r = !e && 1 == (t >> n & 1);
            this.modules[Math.floor(n / 3)][n % 3 + this.moduleCount - 8 - 3] = r
        }
        for (var n = 0; 18 > n; n++) {
            var r = !e && 1 == (t >> n & 1);
            this.modules[n % 3 + this.moduleCount - 8 - 3][Math.floor(n / 3)] = r
        }
    },
    setupTypeInfo: function(e, t) {
        for (var n = this.errorCorrectLevel << 3 | t,
        r = QRUtil.getBCHTypeInfo(n), i = 0; 15 > i; i++) {
            var o = !e && 1 == (r >> i & 1);
            6 > i ? this.modules[i][8] = o: 8 > i ? this.modules[i + 1][8] = o: this.modules[this.moduleCount - 15 + i][8] = o
        }
        for (var i = 0; 15 > i; i++) {
            var o = !e && 1 == (r >> i & 1);
            8 > i ? this.modules[8][this.moduleCount - i - 1] = o: 9 > i ? this.modules[8][15 - i - 1 + 1] = o: this.modules[8][15 - i - 1] = o
        }
        this.modules[this.moduleCount - 8][8] = !e
    },
    mapData: function(e, t) {
        for (var n = -1,
        r = this.moduleCount - 1,
        i = 7,
        o = 0,
        s = this.moduleCount - 1; s > 0; s -= 2) for (6 == s && s--;;) {
            for (var a = 0; 2 > a; a++) if (null == this.modules[r][s - a]) {
                var l = !1;
                o < e.length && (l = 1 == (e[o] >>> i & 1));
                var u = QRUtil.getMask(t, r, s - a);
                u && (l = !l),
                this.modules[r][s - a] = l,
                i--,
                -1 == i && (o++, i = 7)
            }
            if (r += n, 0 > r || this.moduleCount <= r) {
                r -= n,
                n = -n;
                break
            }
        }
    }
},
QRCode.PAD0 = 236,
QRCode.PAD1 = 17,
QRCode.createData = function(e, t, n) {
    for (var r = QRRSBlock.getRSBlocks(e, t), i = new QRBitBuffer, o = 0; o < n.length; o++) {
        var s = n[o];
        i.put(s.mode, 4),
        i.put(s.getLength(), QRUtil.getLengthInBits(s.mode, e)),
        s.write(i)
    }
    for (var a = 0,
    o = 0; o < r.length; o++) a += r[o].dataCount;
    if (i.getLengthInBits() > 8 * a) throw new Error("code length overflow. (" + i.getLengthInBits() + ">" + 8 * a + ")");
    for (i.getLengthInBits() + 4 <= 8 * a && i.put(0, 4); i.getLengthInBits() % 8 != 0;) i.putBit(!1);
    for (;;) {
        if (i.getLengthInBits() >= 8 * a) break;
        if (i.put(QRCode.PAD0, 8), i.getLengthInBits() >= 8 * a) break;
        i.put(QRCode.PAD1, 8)
    }
    return QRCode.createBytes(i, r)
},
QRCode.createBytes = function(e, t) {
    for (var n = 0,
    r = 0,
    i = 0,
    o = new Array(t.length), s = new Array(t.length), a = 0; a < t.length; a++) {
        var l = t[a].dataCount,
        u = t[a].totalCount - l;
        r = Math.max(r, l),
        i = Math.max(i, u),
        o[a] = new Array(l);
        for (var c = 0; c < o[a].length; c++) o[a][c] = 255 & e.buffer[c + n];
        n += l;
        var h = QRUtil.getErrorCorrectPolynomial(u),
        p = new QRPolynomial(o[a], h.getLength() - 1),
        d = p.mod(h);
        s[a] = new Array(h.getLength() - 1);
        for (var c = 0; c < s[a].length; c++) {
            var f = c + d.getLength() - s[a].length;
            s[a][c] = f >= 0 ? d.get(f) : 0
        }
    }
    for (var v = 0,
    c = 0; c < t.length; c++) v += t[c].totalCount;
    for (var m = new Array(v), g = 0, c = 0; r > c; c++) for (var a = 0; a < t.length; a++) c < o[a].length && (m[g++] = o[a][c]);
    for (var c = 0; i > c; c++) for (var a = 0; a < t.length; a++) c < s[a].length && (m[g++] = s[a][c]);
    return m
};
for (var QRMode = {
    MODE_NUMBER: 1,
    MODE_ALPHA_NUM: 2,
    MODE_8BIT_BYTE: 4,
    MODE_KANJI: 8
},
QRErrorCorrectLevel = {
    L: 1,
    M: 0,
    Q: 3,
    H: 2
},
QRMaskPattern = {
    PATTERN000: 0,
    PATTERN001: 1,
    PATTERN010: 2,
    PATTERN011: 3,
    PATTERN100: 4,
    PATTERN101: 5,
    PATTERN110: 6,
    PATTERN111: 7
},
QRUtil = {
    PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]],
    G15: 1335,
    G18: 7973,
    G15_MASK: 21522,
    getBCHTypeInfo: function(e) {
        for (var t = e << 10; QRUtil.getBCHDigit(t) - QRUtil.getBCHDigit(QRUtil.G15) >= 0;) t ^= QRUtil.G15 << QRUtil.getBCHDigit(t) - QRUtil.getBCHDigit(QRUtil.G15);
        return (e << 10 | t) ^ QRUtil.G15_MASK
    },
    getBCHTypeNumber: function(e) {
        for (var t = e << 12; QRUtil.getBCHDigit(t) - QRUtil.getBCHDigit(QRUtil.G18) >= 0;) t ^= QRUtil.G18 << QRUtil.getBCHDigit(t) - QRUtil.getBCHDigit(QRUtil.G18);
        return e << 12 | t
    },
    getBCHDigit: function(e) {
        for (var t = 0; 0 != e;) t++,
        e >>>= 1;
        return t
    },
    getPatternPosition: function(e) {
        return QRUtil.PATTERN_POSITION_TABLE[e - 1]
    },
    getMask: function(e, t, n) {
        switch (e) {
        case QRMaskPattern.PATTERN000:
            return (t + n) % 2 == 0;
        case QRMaskPattern.PATTERN001:
            return t % 2 == 0;
        case QRMaskPattern.PATTERN010:
            return n % 3 == 0;
        case QRMaskPattern.PATTERN011:
            return (t + n) % 3 == 0;
        case QRMaskPattern.PATTERN100:
            return (Math.floor(t / 2) + Math.floor(n / 3)) % 2 == 0;
        case QRMaskPattern.PATTERN101:
            return t * n % 2 + t * n % 3 == 0;
        case QRMaskPattern.PATTERN110:
            return (t * n % 2 + t * n % 3) % 2 == 0;
        case QRMaskPattern.PATTERN111:
            return (t * n % 3 + (t + n) % 2) % 2 == 0;
        default:
            throw new Error("bad maskPattern:" + e)
        }
    },
    getErrorCorrectPolynomial: function(e) {
        for (var t = new QRPolynomial([1], 0), n = 0; e > n; n++) t = t.multiply(new QRPolynomial([1, QRMath.gexp(n)], 0));
        return t
    },
    getLengthInBits: function(e, t) {
        if (t >= 1 && 10 > t) switch (e) {
        case QRMode.MODE_NUMBER:
            return 10;
        case QRMode.MODE_ALPHA_NUM:
            return 9;
        case QRMode.MODE_8BIT_BYTE:
            return 8;
        case QRMode.MODE_KANJI:
            return 8;
        default:
            throw new Error("mode:" + e)
        } else if (27 > t) switch (e) {
        case QRMode.MODE_NUMBER:
            return 12;
        case QRMode.MODE_ALPHA_NUM:
            return 11;
        case QRMode.MODE_8BIT_BYTE:
            return 16;
        case QRMode.MODE_KANJI:
            return 10;
        default:
            throw new Error("mode:" + e)
        } else {
            if (! (41 > t)) throw new Error("type:" + t);
            switch (e) {
            case QRMode.MODE_NUMBER:
                return 14;
            case QRMode.MODE_ALPHA_NUM:
                return 13;
            case QRMode.MODE_8BIT_BYTE:
                return 16;
            case QRMode.MODE_KANJI:
                return 12;
            default:
                throw new Error("mode:" + e)
            }
        }
    },
    getLostPoint: function(e) {
        for (var t = e.getModuleCount(), n = 0, r = 0; t > r; r++) for (var i = 0; t > i; i++) {
            for (var o = 0,
            s = e.isDark(r, i), a = -1; 1 >= a; a++) if (! (0 > r + a || r + a >= t)) for (var l = -1; 1 >= l; l++) 0 > i + l || i + l >= t || 0 == a && 0 == l || s == e.isDark(r + a, i + l) && o++;
            o > 5 && (n += 3 + o - 5)
        }
        for (var r = 0; t - 1 > r; r++) for (var i = 0; t - 1 > i; i++) {
            var u = 0;
            e.isDark(r, i) && u++,
            e.isDark(r + 1, i) && u++,
            e.isDark(r, i + 1) && u++,
            e.isDark(r + 1, i + 1) && u++,
            0 != u && 4 != u || (n += 3)
        }
        for (var r = 0; t > r; r++) for (var i = 0; t - 6 > i; i++) e.isDark(r, i) && !e.isDark(r, i + 1) && e.isDark(r, i + 2) && e.isDark(r, i + 3) && e.isDark(r, i + 4) && !e.isDark(r, i + 5) && e.isDark(r, i + 6) && (n += 40);
        for (var i = 0; t > i; i++) for (var r = 0; t - 6 > r; r++) e.isDark(r, i) && !e.isDark(r + 1, i) && e.isDark(r + 2, i) && e.isDark(r + 3, i) && e.isDark(r + 4, i) && !e.isDark(r + 5, i) && e.isDark(r + 6, i) && (n += 40);
        for (var c = 0,
        i = 0; t > i; i++) for (var r = 0; t > r; r++) e.isDark(r, i) && c++;
        var h = Math.abs(100 * c / t / t - 50) / 5;
        return n += 10 * h
    }
},
QRMath = {
    glog: function(e) {
        if (1 > e) throw new Error("glog(" + e + ")");
        return QRMath.LOG_TABLE[e]
    },
    gexp: function(e) {
        for (; 0 > e;) e += 255;
        for (; e >= 256;) e -= 255;
        return QRMath.EXP_TABLE[e]
    },
    EXP_TABLE: new Array(256),
    LOG_TABLE: new Array(256)
},
i = 0; 8 > i; i++) QRMath.EXP_TABLE[i] = 1 << i;
for (var i = 8; 256 > i; i++) QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
for (var i = 0; 255 > i; i++) QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
QRPolynomial.prototype = {
    get: function(e) {
        return this.num[e]
    },
    getLength: function() {
        return this.num.length
    },
    multiply: function(e) {
        for (var t = new Array(this.getLength() + e.getLength() - 1), n = 0; n < this.getLength(); n++) for (var r = 0; r < e.getLength(); r++) t[n + r] ^= QRMath.gexp(QRMath.glog(this.get(n)) + QRMath.glog(e.get(r)));
        return new QRPolynomial(t, 0)
    },
    mod: function(e) {
        if (this.getLength() - e.getLength() < 0) return this;
        for (var t = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0)), n = new Array(this.getLength()), r = 0; r < this.getLength(); r++) n[r] = this.get(r);
        for (var r = 0; r < e.getLength(); r++) n[r] ^= QRMath.gexp(QRMath.glog(e.get(r)) + t);
        return new QRPolynomial(n, 0).mod(e)
    }
},
QRRSBlock.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]],
QRRSBlock.getRSBlocks = function(e, t) {
    var n = QRRSBlock.getRsBlockTable(e, t);
    if (void 0 == n) throw new Error("bad rs block @ typeNumber:" + e + "/errorCorrectLevel:" + t);
    for (var r = n.length / 3,
    i = new Array,
    o = 0; r > o; o++) for (var s = n[3 * o + 0], a = n[3 * o + 1], l = n[3 * o + 2], u = 0; s > u; u++) i.push(new QRRSBlock(a, l));
    return i
},
QRRSBlock.getRsBlockTable = function(e, t) {
    switch (t) {
    case QRErrorCorrectLevel.L:
        return QRRSBlock.RS_BLOCK_TABLE[4 * (e - 1) + 0];
    case QRErrorCorrectLevel.M:
        return QRRSBlock.RS_BLOCK_TABLE[4 * (e - 1) + 1];
    case QRErrorCorrectLevel.Q:
        return QRRSBlock.RS_BLOCK_TABLE[4 * (e - 1) + 2];
    case QRErrorCorrectLevel.H:
        return QRRSBlock.RS_BLOCK_TABLE[4 * (e - 1) + 3];
    default:
        return
    }
},
QRBitBuffer.prototype = {
    get: function(e) {
        var t = Math.floor(e / 8);
        return 1 == (this.buffer[t] >>> 7 - e % 8 & 1)
    },
    put: function(e, t) {
        for (var n = 0; t > n; n++) this.putBit(1 == (e >>> t - n - 1 & 1))
    },
    getLengthInBits: function() {
        return this.length
    },
    putBit: function(e) {
        var t = Math.floor(this.length / 8);
        this.buffer.length <= t && this.buffer.push(0),
        e && (this.buffer[t] |= 128 >>> this.length % 8),
        this.length++
    }
};